接池的核心思想是:一次性的批量的弄出多个连接对象放到连接池中,当需要操作数据库的时候,就从连接池中取出一个 链接 使用,当用完了连接 之后,再次将连接放回到池子中去,这样就避免了不断的创建连接, 不断的释放连接的过程,从而一定程序上显著的提高程序的性能.
- MyDataSource.java 继承实现DataSource接口
javax.sql.DataSource;
public class MyDataSource implements DataSource {
//因为这里做增删操作,所以要用linkedlist效率会高一点
private LinkedList<Connection> pool = new LinkedList<Connection>();
//自定义无参构造函数
public MyDataSource() {
//批量的弄一些连接,list中
System.out.println("弄了10个链接");
for (int i = 0; i < 10; i++) {
Connection conn = JdbcUtils.getConnection();
pool.add(conn);
}
}
//通过这个方法可以返回一个连接
@Override
public Connection getConnection() throws SQLException {
//判断是否有连接可用
if (pool.isEmpty()) {
//再弄三个连接到池子里去
for (int i = 0; i < 3; i++) {
Connection conn = JdbcUtils.getConnection();
pool.add(conn);
}
}
//总是从池子中返回第一个连接
Connection conn = pool.removeFirst();
//返回连接对象
return conn;
}
.......
.......
.......
.......
}
- MyDataSourceTest.java实现调用方法
public class MyDataSourceTest {
@Test
public void test1() {
Connection conn =null;
PreparedStatement stmt=null;
MyDateSource ds = null;
try {
ds = new MyDataSource();
//获得连接
//conn = JdbcUtils.getConnection();
//从连接池中取出连接对象
conn = ds.getConnection();
stmt = conn.prepareStatement("update account set money=? where name=?");
stmt.setDouble(1, 99999);
stmt.setString(2, "aaa");
stmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally {
//将从连接池中取出的连接对象存回连接池中
ds.addBack2Pool(conn);
//释放资源,conn设置为空,防止连接被释放
JdbcUtils.release(null, stmt, conn);
}
}
}