03016_DBCP连接池
1、连接池概述
(1)用池来管理Connection,这样可以重复使用Connection;
(2)有了池,所以我们就不用自己来创建Connection,而是通过池来获取Connection对象;
(3)当使用完Connection后,调用Connection的close()方法也不会真的关闭Connection,而是把Connection“归还”给池。池就可以再利用这个Connection对象了;
(4)Java为数据库连接池提供了公共的接口:javax.sql.DataSource,各个厂商需要让自己的连接池实现这个接口。这样应用程序可以方便的切换不同厂商的连接池;
(5)常见的连接池:DBCP、C3P0。
2、DBCP连接池
(1)DBCP也是一个开源的连接池,是Apache Common成员之一,在企业开发中也比较常见,tomcat内置的连接池;
(2)下载并导入commons-dbcp-1.4.jar和commons-pool-1.5.6.jar包,下载链接commons-dbcp-1.4.jar和commons-pool-1.5.6.jar 密码:q81g ;
(3)编写工具类
①连接数据库表的工具类, 采用DBCP连接池的方式来完成,Java中提供了一个连接池的规则接口:
DataSource : 它是java中提供的连接池,作为 DriverManager 工具的替代项。在DBCP包中提供了DataSource接口的实现类,我们要用的具体的连接池 BasicDataSource类。
1 import javax.sql.DataSource; 2 3 import org.apache.commons.dbcp.BasicDataSource; 4 5 public class JDBCUtils { 6 public static final String DRIVER = "com.mysql.jdbc.Driver"; 7 public static final String URL = "jdbc:mysql://localhost:3306/mybase"; 8 public static final String USERNAME = "root"; 9 public static final String PASSWORD = "root"; 10 /* 11 * 创建连接池BasicDataSource 12 */ 13 public static BasicDataSource dataSource = new BasicDataSource(); 14 // 静态代码块 15 static { 16 // 对连接池对象 进行基本的配置 17 dataSource.setDriverClassName(DRIVER); // 这是要连接的数据库的驱动 18 dataSource.setUrl(URL); // 指定要连接的数据库地址 19 dataSource.setUsername(USERNAME); // 指定要连接数据的用户名 20 dataSource.setPassword(PASSWORD); // 指定要连接数据的密码 21 } 22 23 /* 24 * 返回连接池对象 25 */ 26 public static DataSource getDataSource() { 27 return dataSource; 28 } 29 }
(4)增
初始数据:
1 import java.sql.SQLException; 2 3 import org.apache.commons.dbutils.QueryRunner; 5 import org.junit.Test; 6 7 /* 8 * 演示使用DBUtils工具 完成数据库表的增删改查 9 */ 10 public class Demo { 11 // 插入功能 12 @Test 13 public void insert() { 14 try { 15 // 获取一个用来执行SQL语句的对象 QueryRunner 16 QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); 17 String sql = "INSERT INTO Sort(sname) VALUES(?)"; 18 Object[] params = { "遥控器" }; 19 int line = qr.update(sql, params); 20 // 结果集处理 21 System.out.println("line = " + line); 22 23 } catch (SQLException e) { 24 throw new RuntimeException(e); 25 } 26 } 27 28 }
运行结果:
(5)删
1 import java.sql.SQLException; 2 3 import org.apache.commons.dbutils.QueryRunner; 4 import org.junit.Test; 5 6 /* 7 * 演示使用DBUtils工具 完成数据库表的增删改查 8 */ 9 public class Demo { 10 // 删除功能 11 @Test 12 public void delete() { 13 try { 14 // 创建一个QueryRunner对象,用来完成SQL语句的执行 15 QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); 16 // 执行SQL语句 17 String sql = "DELETE FROM Sort WHERE sid = ?"; 18 Object[] params = { 7 }; 19 int line = qr.update(sql, params); 20 // 结果集的处理 21 System.out.println("line=" + line); 22 23 } catch (SQLException e) { 24 throw new RuntimeException(e); 25 } 26 } 27 28 }
运行结果:
(6)改
1 import java.sql.SQLException; 2 3 import org.apache.commons.dbutils.QueryRunner; 4 import org.junit.Test; 5 6 /* 7 * 演示使用DBUtils工具 完成数据库表的增删改查 8 */ 9 public class Demo { 10 // 更新功能 11 @Test 12 public void update() { 13 try { 14 // 创建一个QueryRunner对象,用来完成SQL语句的执行 15 QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); 16 // 执行SQL语句 17 String sql = "UPDATE Sort SET sid = sid+2 WHERE sname=?"; 18 Object[] params = { "遥控器" }; 19 int line = qr.update(sql, params); 20 // 结果集的处理 21 System.out.println("line=" + line); 22 23 } catch (SQLException e) { 24 throw new RuntimeException(e); 25 } 26 } 27 28 }
运行结果:
(7)查
1 import java.sql.SQLException; 2 3 import org.apache.commons.dbutils.QueryRunner; 4 import org.apache.commons.dbutils.handlers.BeanHandler; 5 import org.junit.Test; 6 7 /* 8 * 演示使用DBUtils工具 完成数据库表的增删改查 9 */ 10 public class Demo { 11 // 查询功能,将结果集中第一条记录封装到一个指定的javaBean中。 12 @Test 13 public void search() { 14 try { 15 // 获取QueryRunner 16 QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource()); 17 // 执行SQL语句 18 String sql = "SELECT * FROM sort"; 19 Object[] params = {}; 20 Sort p = qr.query(sql, new BeanHandler<Sort>(Sort.class), params); 21 // 结果集处理 22 System.out.println(p); 23 24 } catch (SQLException e) { 25 throw new RuntimeException(e); 26 } 27 } 28 29 }
运行结果:
(8)常见配置项
参考文档链接:参考文档