概念
其实就是一个容器(集合),存放数据库连接的容器。
当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,访问完之后,会将连接对象归还给连接池
实现
标准接口:
javax.sql.DataSource
方法:
- 获取连接:
getConnection()
- 归还连接:
Connection.close()
。如果连接对象Connection
是从连接池中获取的,那么调用Connection.close()
方法,则不会再关闭连接了。而是归还连接
- 获取连接:
一般我们不实现它,由数据库厂商来实现
- C3P0
- Druid
C3P0:数据库连接池技术
步骤
导入 jar 包
c3p0-0.9.5.2.jar
mchange-commons-java-0.2.12.jar
不要忘记导入数据库驱动 jar 包
定义配置文件:
名称:
c3p0.properties
或者c3p0-config.xml
路径:直接放置于 src 下即可
示例:
<c3p0-config> <!-- 使用默认的配置读取连接池对象 --> <default-config> <!-- 连接参数 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property> <property name="user">root</property> <property name="password">root</property> <!-- 连接池参数 --> <property name="initialPoolSize">5</property> <property name="maxPoolSize">10</property> <property name="checkoutTimeout">3000</property> </default-config> <named-config name="otherc3p0"> <!-- 连接参数 --> <property name="driverClass">com.mysql.jdbc.Driver</property> <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property> <property name="user">root</property> <property name="password">root</property> <!-- 连接池参数 --> <property name="initialPoolSize">5</property> <property name="maxPoolSize">8</property> <property name="checkoutTimeout">1000</property> </named-config> </c3p0-config>
创建核心对象:数据库连接池对象
ComboPooledDataSource
获取连接:
getConnection()
Druid:由阿里巴巴提供的数据库连接池实现技术
步骤 :
导入 jar 包,
druid-1.2.8.jar
定义配置文件
是 properties 形式的
可以叫任意名称,可放置于任意目录下
示例:
driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/test username=root password=root # 初始化连接数 initialSize=5 # 最大连接数 maxActive=10 maxWait=3000
加载配置文件,Properties
获取数据库连接对象:通过工厂类来实现
DruidDataSourceFactory
获取连接:
getConnection
代码示例:
// 加载配置文件 Properties pro = new Properties(); InputStream is = DruidDemo.class.getClassLoader().getResourceAsStream("druid.properties"); pro.load(is); // 获取连接池对象 DataSource ds = DruidDataSourceFactory.createDataSource(pro); // 获取连接 Connection conn = ds.getConnection();
定义工具类
定义一个类
JDBCUtils
提供静态代码块加载配置文件,初始化连接池对象
提供方法
- 获取连接方法:通过数据库连接池获取连接
- 释放资源
- 获取连接池方法
public class JDBCUtils { //1.定义成员变量 DataSource private static DataSource ds ; static{ try { //1.加载配置文件 Properties pro = new Properties(); pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties")); //2.获取DataSource ds = DruidDataSourceFactory.createDataSource(pro); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } /** * 获取连接 */ public static Connection getConnection() throws SQLException { return ds.getConnection(); } /** * 释放资源 */ public static void close(Statement stmt,Connection conn){ close(null,stmt,conn); } public static void close(ResultSet rs , Statement stmt, Connection conn){ if(rs != null){ try { rs.close(); } catch (SQLException e) { e.printStackTrace(); } } if(stmt != null){ try { stmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if(conn != null){ try { conn.close();//归还连接 } catch (SQLException e) { e.printStackTrace(); } } } /** * 获取连接池方法 */ public static DataSource getDataSource(){ return ds; } }