前言:
在实际开发中,如果我们不断地创建数据库连接对象,一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完后就立即关闭连接,频繁的打开关闭连接会造成系统性能下降
因此实际开发中不推荐频繁的创建数据库连接对象,频繁的打开物理数据库连接,频繁的关闭物理数据库连接,
如何减少频繁的打开连接,关闭连接?
使用数据库连接池
数据库连接池的原理:应用程序启动时,系统自动建立足够的数据库连接,并将这些连接组成一个池,当应用程序请求数据库连接时,无需创建连接,而是从数据库连接池中取系统已建立好的连接使用,,使用完此连接后,并不关闭连接,而是将此连接还给数据库连接池
因此使用连接池可以避免频繁的打开数据库连接,频繁的关闭数据库连接
数据库连接池的常用参数?
数据库的初始连接数
连接池的最大连接数
连接池的最小连接数
连接池每次增加的容量
jdbc对数据库连接池的支持?
数据库连接池使用了什么设计模式?
桥接设计模式,将抽象和实现分离,
jdbc提供了javax.sql.DataSource接口代表数据库连接池接口,由其他组织提供对应的数据库连接池的实现
javax.sql.DataSource数据库连接池接口的源码
public interface DataSource extends CommonDataSource, Wrapper {
Connection getConnection() throws SQLException;
Connection getConnection(String username, String password)
throws SQLException;
}
由开源组织提供对应的数据库连接池的实现:DBCP和C3P0
DBCP数据库连接池的使用
(1)需要commons-dbcp.jar(连接池的实现)和commons-pool.jar(连接池实现的依赖库)
(2)使用DBCP来获得数据库连接
BasicDataSource ds=new BasicDataSource();//数据库连接池对象
ds.setDriverclassName("com.mysql.jdbc.Driver");//设置数据库连接池所需的驱动
ds.setUrl("jdbc:mysql://localhost:3306/javaee");//设置连接数据库的url
ds.setUsername("root");
ds.setPassword("pass");
ds.setInitialSize(5);//设置连接池的初始连接数
ds.seteMaxActive(20);//设置连接池最多可有多少个活动连接数
ds.setMinIdle(2);//设置连接池中最少有3个空闲连接
Connection conn=ds.getConnection();
conn.close();//释放数据库连接,将连接归还给数据库连接池
C3P0数据库连接池的使用
(1)需要c3p0-0.9.1.2.jar(连接池的实现)
(2)使用C3-0来获得数据库连接
ComboPooledDataSource ds=new ComboPooledDataSource();//设置数据库连接池实例
ds.setDriverclassName("com.mysql.jdbc.Driver");//设置数据库连接池所需的驱动
ds.setJdbcUrl("jdbc:mysql://localhost:3306/javaee");//设置连接数据库的url
ds.setUser("root");
ds.setPassword("pass");
ds.setInitialPoolSize(5);//设置连接池的初始连接数
ds.seteMaxPoolSize(20);//设置连接池最大连接数
ds.setMinPoolSize(2);//设置连接池最小连接数
ds.setMaxStatements(10);//设置连接池的缓存Statement的最大数