一】原理
·传统的:
1)JDBC传统方式找DriverMannager要连接,而这个连接的数目是有限的。
2)传统方式的close(),并未将Connection重用,只是切断应用程序和数据库的桥梁,即无SQL语句发送到数据库。
3)项目中,对于Connection不会直接使用DriverMannager取得,而使用连接池方式取得。
4)DBCP和C3P0都是开源的连接池,都必须直接或间接实现javax.sql.DataSource接口
·连接池
1)示意图
2)开源的连接池
DBCP数据库连接池(tomcat)
C3P0数据库连接池(hibernate)
二】DBCP连接池(tomcat):需要利用Properties属性文件进行配置
重点类:
1)BasicDataSourceFactory //连接池工厂
重点方法:
static DataSource createDataSource(Properties properties);//创建一个连接池
2)DataSource
Conncetion getConncetion();
code:
//配置文件:
·传统的:
1)JDBC传统方式找DriverMannager要连接,而这个连接的数目是有限的。
2)传统方式的close(),并未将Connection重用,只是切断应用程序和数据库的桥梁,即无SQL语句发送到数据库。
3)项目中,对于Connection不会直接使用DriverMannager取得,而使用连接池方式取得。
4)DBCP和C3P0都是开源的连接池,都必须直接或间接实现javax.sql.DataSource接口
·连接池
1)示意图
![](https://i-blog.csdnimg.cn/blog_migrate/5db8bb2e359b3de76dc58dd6b6fa9aed.png)
2)开源的连接池
DBCP数据库连接池(tomcat)
C3P0数据库连接池(hibernate)
二】DBCP连接池(tomcat):需要利用Properties属性文件进行配置
重点类:
1)BasicDataSourceFactory //连接池工厂
重点方法:
static DataSource createDataSource(Properties properties);//创建一个连接池
2)DataSource
Conncetion getConncetion();
code:
//配置文件:
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://127.0.0.1:3306/jdbc username=root password=root
//JavaCode
// 创建一个线程池工厂 BasicDataSourceFactory factory = new BasicDataSourceFactory(); // 加载properties配置文件 Properties prop = new Properties(); InputStream is = Thread.currentThread().getClass() .getResourceAsStream("/dbcp.properties"); prop.load(is); DataSource dataSource = factory.createDataSource(prop); long start = System.currentTimeMillis(); for (int i = 1; i <= 50000; i++) { //从连接池中取得一个连接 Connection conn = dataSource.getConnection(); System.out.println(i + " :个连接"); //释放一个连接给连接池 conn.close(); } long end = System.currentTimeMillis(); System.out.println("共用了"+ (end-start)/1000 +"秒");
三】C3P0连接池(hibernate):Connectin和"Statement族类"都重用了!!! 需要配置XML文件
1)重点类:
ComboPooledDataSource //创建C3P0连接池的关键类
重点方法:
Connection getConnection();//得到一个C3P0连接池中的连接
code:
配置文件:
//c3p0-config.xml 【!名字不能乱取!并且一定要放到src目录下,即编译后的项目的/WEB-INF/classes目录下】 <?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <default-config> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="user">root</property> <property name="password">568231252</property> <property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/jdbc</property> </default-config> </c3p0-config>
//JavaCode
//Demo.java ComboPooledDataSource dataSource = new ComboPooledDataSource(); long start = System.currentTimeMillis(); for (int i = 1; i <= 50000; i++) { Connection conn = dataSource.getConnection(); System.out.println(i + " :个连接"); conn.close(); } long end = System.currentTimeMillis(); System.out.println("共用了" + (end - start) / 1000 + "秒");
四】DBCP连接池和C3P0连接池对比
1)DBCP连接池需要dbcp.properties文件,同时需要添加3个对应的jar包
2)C3P0连接池需要在/WEB-INF/classes目录下(IDE即为src下)存放存放c3p0-config.xml文件,并且名字不能改
3)ComboPooledDatasource在创建时会自动在指定的目录下找xml文件,并加载默认设置