JDBC学习2
一.数据库连接池
-
概念
数据库连接池,其实就类似一个容器(集合),存放的是数据库连接(类比线程池)
当系统初始化好后,会创建容器,然后申请一些连接对象,当用户需要访问数据库时,可以从容器中获取连接对象,使用完毕后再归还容器。
-
优点
节约系统资源,能避免频繁的创建和销毁JDBC连接。
-
实现方式
Java提供了一个标准的接口
javax.sql.DataSource
,但这仅仅只是一个接口,没有实现,因此我们要使用连接池,还必须选择一个JDBC连接池的实现。一般我们不用去实现连接池,由数据库厂商去实现,常用的连接池有:
- C3P0
- Druid
- 从性能方面比较:Druid>C3P0
- druid功能最为全面,sql拦截等功能,统计数据较为全面,具有良好的扩展性。
- 综合性能,扩展性等方面,一般考虑使用Druid
-
连接池的操作步骤
-
C3P0
步骤:
-
导入jar包
**c3p0-0.9.5.2.jar **
mchange-commons-java-0.2.12.jar
-
定义配置文件
文件名称:c3p0.properties或者c3p0-config.xml
存放路径:直接放在src目录下即可
-
创建连接池实例(DataSource实例)
DataSource ds = new ComboPooledDataSource();
-
获取连接对象
Connection conn = ds.getConnection()
public class C3P0Demo1 { public static void main(String[] args) throws SQLException { // 1. 创建数据库连接池对象 DataSource ds = new ComboPooledDataSource(); // 2. 获取连接对象 Connection conn = ds.getConnection(); System.out.println(conn); PreparedStatement pstate = conn.prepareStatement("select * from account"); ResultSet rs = pstate.executeQuery(); while (rs.next()) { System.out.println(rs.getInt("id")); System.out.println(rs.getString("name")); System.out.println(rs.getDouble("balance")); } rs.close(); pstate.close(); conn.close(); } }
-
-
Druid
步骤:
-
导入jar包
druid-1.0.9.jar
-
定义配置文件
格式为properties的,名字可以是任意,路径也可以是任意
-
加载配置文件
使用Properties集合类:
Properties pro = new Properties(); InputStream is = JDBCUtil.class.getClassLoader().getResourceAsStream("druid.properties"); pro.load(is);
-
获取连接池对象
ds = DruidDataSourceFactory.createDataSource(pro);
-
获取连接对象
conn = ds.getConnection();
public class DruidDemo1 { public static void main(String[] args) throws Exception { Properties pro = new Properties(); InputStream is = DruidDemo1.class.getClassLoader().getResourceAsStream("druid.properties"); pro.load(is); // 获取连接池对象 DataSource ds = DruidDataSourceFactory.createDataSource(pro); Connection conn = ds.getConnection(); PreparedStatement pstate = conn.prepareStatement("select * from account"); ResultSet rs = pstate.executeQuery(); while (rs.next()) { System.out.println(rs.getInt("id")); System.out.println(rs.getString("name")); System.out.println(rs.getDouble("balance")); } rs.close(); pstate.close(); conn.close(); } }
-
-