00316_DBCP连接池

Posted Lamfai

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了00316_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)常见配置项

  

  参考文档链接:参考文档

以上是关于00316_DBCP连接池的主要内容,如果未能解决你的问题,请参考以下文章

DBCP连接池配置参数

DBCP连接池

DBCP连接池原理分析

DBCP--""连接池创建"与"资源关闭"Util类

[转]MySQL连接池配置详解(DBCP)

如何跟踪/记录 tomcat dbcp 池中的连接并检测不返回连接池的代码