提纲:
1.数据库连接池介绍以及如何自定义数据库连接池
2.介绍两种连接库连接池DBCP,c3p0(文后附jar包)
3.tomcat管理连接池.
##DataSource(数据源/数据库连接池 )简单介绍
连接池:创建多个Connection对象,放入到连接池(其实就是一个容器)中
当使用时,从连接池中取出一个连接对象,使用完成后,再将这个对象
放回到池中.
编写连接池需要实现javax.sql.DataSource接口
自定义连接池步骤
1.创建类实现 DataSource接口
2.重写getConnection方法
3.创建一个LinkedList集合
4.在构造方法中向集合中添加多个Connection对象
5.在getConnection方法中,从集合中获取Connection对象返回(removeFirst())
6.定义一个closeCon方法,用于回收使用后的Connection对象
下面来演示一下自定义连接池:
package cn.lawfree.datasource;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.SQLFeatureNotSupportedException;
import java.util.LinkedList;
import java.util.logging.Logger;
import javax.sql.DataSource;
import cn.itcast.JDBC.util.JdbcUtil;
public class MyDataSource implements DataSource {
// 定义一个容器用来装入Connection.
private LinkedList<Connection> conns = new LinkedList<Connection>();
// 定义构造方法
public MyDataSource() {
for (int i = 0; i < 10; i++) {
conns.add(JdbcUtil.getConnection());
}
}
@Override
public Connection getConnection() throws SQLException {
// 若连接池中没有连接对象,重新创建三个
if (conns.size() == 0) {
for (int i = 0; i < 3; i++) {
return conns.removeFirst();
}
}
return conns.removeFirst();
}
// 用来回收连接对象
public void closeConnection(Connection conn) {
conns.add(conn);
}
@Override
public Connection getConnection(String arg0, String arg1)
throws SQLException {
return null;
...
**问题:*为了不依赖于自定义的API,而是可以直接使用java.sql. ,java.sql.*中的API
怎样解决 con.close()时不是销毁con对象,而是将对象重新放到连接池中
**分析:**原本close方法是销毁Connection对象,现在要将这个方法的功能进行改变(增强)