JAVA基础知识之JDBC——JDBC数据库连接池

JDBC数据库连接池

数据库的连接和关闭是很耗费资源的操作,前面介绍的DriverManager方式获取的数据库连接,一个Connection对象就对应了一个物理数据库连接,每次操作都要打开一个连接,使用完关闭,需要使用时又重新连接。这将严重影响系统性能。

为了解决这个问题,JDBC2.0引入了数据库连接池。当程序启动时,系统预先创建一批数据库连接对象,形成一个连接池。当程序请求连接时,不需要重新打开物理数据库连接,而是从连接池中获取一个连接,使用完之后,也不是直接关闭物理数据库连接,而是将这个连接对象再次放入连接池。通过使用连接池,大大提高程序性能。

JDBC提供了连接池接口,即javax.sql.DataSource. 一些商用服务器(例如WebLogic, Websphere)提供了具体实现。另外也有一些开源组织提供了实现,例如DBCP和C3P0)

DBCP数据源

这是apache针对JDBC的DataSource接口的开源实现,Tomcat的连接池就是使用它来实现的。

要使用DBCP,需要在工程类库中加入,commons-dbcp.jar和commons-pool.jar两个包。

典型的用法如,

 1         // 创建连接池连接对象
 2         BasicDataSource ds = new BasicDataSource();
 3         // 连接池的数据库配置信息
 4         ds.setDriverClassName("com.mysql.jdbc.Driver");
 5         ds.setUrl("url=jdbc:mysql://127.0.0.1:3306/dedecms?useUnicode=true&characterEncoding=utf8");
 6         ds.setUsername("root");
 7         ds.setPassword("pass");
 8         // 设置连接池的初始连接数
 9         ds.setInitialSize(5);
10         // 设置连接池最多可以有多少个活动连接
11         ds.setMaxActive(20);

实际应用中,建议将连接池对象设置为static,这样在需要使用数据连接的地方,只需要通过ds获取一个连接池中的连接即可,使用完之后再放回连接池,

1         //从连接池中拿出一个连接来使用
2         Connection conn = ds.getConnection();
3         //并非关闭物理连接,而是把连接对象放回连接池
4         conn.close();

C3P0连接池

C3P0不仅可以自动清理不再使用的Connection,还可以清理Statement和ResultSet.因此Hibernate就推荐使用它。

要使用C3P0,只需要在工程中引入c3p0-xxxx.jar包即可,典型用法跟DBCP差不多,

 1         ComboPooledDataSource ds = new ComboPooledDataSource();
 2         // 连接池的数据库配置信息
 3         ds.setDriverClassName("com.mysql.jdbc.Driver");
 4         ds.setUrl("url=jdbc:mysql://127.0.0.1:3306/dedecms?useUnicode=true&characterEncoding=utf8");
 5         ds.setUsername("root");
 6         ds.setPassword("pass");
 7         // 设置连接池的初始连接数
 8         ds.setInitialSize(40);
 9         // 设置最大连接数
10         ds.setMaxPoolSize(2);
11         // 设置最小连接数
12         ds.setMinPoolSize(2);
13         // 设置连接池缓存Statement的最大数
14         ds.setMaxStatements(180);
15         
16         Connection conn = ds.getConnection();

 

posted @ 2016-12-16 15:10  fysola  阅读(385)  评论(0编辑  收藏  举报