数据库连接池
1. 数据库连接池
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。连接池的作用是降低建立和关闭数据库连接所产生的系统开销,提高应用程序的性能。
2. 连接池工作原理
-
在系统初始化时,将数据库连接作为对象存储在内存中。
-
当用户需要访问数据库时,先检查连接池是否有空闲连接。如果有,分配一个空闲连接。如果没有,再检查连接池是否达到最大连接数。如果没有,则新建一个连接。如果达到最大连接数,则在等待队列中进行等待。如果连接请求超过最大等待时间,则抛出异常。
-
使用完毕后,将连接放回连接池中。
3. 连接池主要参数
-
最大连接数:可以同时从连接池分配的数据库连接的最大值。
-
最大空闲连接数:连接池一直保持的数据库连接的最大值。
-
最小空闲连接数:连接池一直保持的数据库连接的最小值。
-
初始化连接数:连接池启动时,建立的初始连接数。
-
最大等待时间:连接池无可用连接时,等待从连接池取出连接的最大时间,单位毫秒。
4. 常用连接池
DBCP(DataBase connection pool,数据库连接池)是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。使用 DBCP 需要2个包:commons-dbcp.jar,commons-pool.jar
C3P0 是一个开源的JDBC连接池,它实现了数据源和JNDI绑定。目前使用它的开源项目有Hibernate,Spring等。
Druid 是阿里巴巴开源平台上数据库连接池的实现,还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser。可以监控连接池和SQL的执行情况。
5. JDBC
JDBC(Java DataBase Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,由一组用Java语言编写的类和接口组成。
-
DriverManager:管理数据库驱动程序,通过驱动建立与数据库的连接。
-
Connection:与数据库的连接,是一个会话对象。
-
Statement:此接口用于将SQL语句发送到数据库。
-
ResultSet:使用 Statement 对象执行 SQL 查询后,该对象保存检索的数据。
-
SQLException:处理数据库程序中发生的任何异常。
Connection con = DriverManager.getConnection("url","username","password");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (rs.next()) {
int x = rs.getInt("a");
String s = rs.getString("b");
float f = rs.getFloat("c");
}
Java 为数据库连接池提供了公共接口 javax.sql.DataSource,用连接池来管理 Connection 。
![](https://img2018.cnblogs.com/blog/1499123/201909/1499123-20190925160723451-1530841855.png)