JDBC(連接池) -- 02(I)
阿新 • • 發佈:2017-10-08
cep 介紹 val 代碼 connect pack -- -1 i++
import java.sql.Connection;
import java.sql.PreparedStatement;
import org.junit.Test;
import com.it.JDBC.JDBCUtils;
import com.it.JDBC.MyDataSource;
public class TestMyDataSource {
@Test
public void testAddUser() {
Connection conn = null;
MyDataSource md = new MyDataSource();
PreparedStatement psmt = null;
try {
conn = md.getConnection();
String sql = "insert into t_user(id,pwd) values(?,?)";
psmt = conn.prepareStatement(sql);
psmt.setInt(1, 2015005);
psmt.setString(2, "2015005");
int rows = psmt.executeUpdate();
if (rows > 0) {
System.out.println("插入數據成功!");
} else {
System.out.println("插入數據失敗!");
}
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
JDBCUtils.Release(null, psmt, null);
md.backConnection();
}
}
}
自定義連接池一: 1.sun提供了一個連接池接口 javax.sql.DataSource。 2.定義連接池MyDataSource實現接口DataSource。 3.使用集合LinkedList<Connection> pool存放多個連接對象。LinkedList移除添加操作效率高。連接對象還是和以前一樣調用工具類JDBCUtils裏的getConnection。(第一篇JDBC的有介紹) 4.書寫獲取連接的方法getConnection(),獲取連接改為從池子中拿對象。 5.書寫歸還連的方法backConnection()。把從池子pool中獲取的對象歸還。 我們需要三個類:
1.JDBCUtils(第一篇JDBC的隨筆有介紹如何書寫)
2.MyDataSource
3.TestMyDataSource
註:測試用的Junit。
一、書寫MyDataSource方法,此處不實現接口DataSource
package com.it.JDBC; import java.sql.Connection; import java.util.LinkedList; /** * @author Payphone * @time 2017-10-07 自定義連接池,未增強close方法 * */ public class MyDataSource { private static Connection conn; private static LinkedList<Connection> pool = newLinkedList<Connection>(); /** * 構造方法初始化連接池個數,也可用靜態代碼塊初始化。 * */ public MyDataSource() { for (int i = 0; i < 5; i++) { conn = JDBCUtils.getConnection(); pool.add(conn); } System.out.println("---------分割線---------"); } /*** 獲取連接 * */ public Connection getConnection() { System.out.println("連接前的個數:" + pool.size()); conn = pool.remove(0); System.out.println("連接後的個數:" + pool.size()); return conn; } /** * 歸還連接 * */ public void backConnection() { System.out.println("釋放連接前的個數:" + pool.size()); pool.add(conn); System.out.println("釋放連接後的個數:" + pool.size()); } }
二、書寫測試方法TestMyDataSource
package com.it.TestJDBC;import java.sql.Connection;
import java.sql.PreparedStatement;
import org.junit.Test;
import com.it.JDBC.JDBCUtils;
import com.it.JDBC.MyDataSource;
public class TestMyDataSource {
@Test
public void testAddUser() {
Connection conn = null;
MyDataSource md = new MyDataSource();
PreparedStatement psmt = null;
try {
conn = md.getConnection();
String sql = "insert into t_user(id,pwd) values(?,?)";
psmt = conn.prepareStatement(sql);
psmt.setInt(1, 2015005);
psmt.setString(2, "2015005");
int rows = psmt.executeUpdate();
if (rows > 0) {
System.out.println("插入數據成功!");
} else {
System.out.println("插入數據失敗!");
}
} catch (Exception e) {
throw new RuntimeException(e);
} finally {
JDBCUtils.Release(null, psmt, null);
md.backConnection();
}
}
}
自定義連接池一代碼並不完善,我們調用了工具類JDBCUtils.Release方法釋放了除conn外的對象。又調用了md.backConnection方法歸還conn。
在自定義連接池二的代碼中我們將增強close方法。調用工具類JDBCUtils.Release方法歸還連接。
JDBC(連接池) -- 02(I)