C3P0连接池

c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展。c3p0一般是与Hibernate,Spring等框架一块使用的,当然也可以单独使用。

dbcp没有自动回收空闲连接的功能,c3p0有自动回收空闲连接功能

使用c3p0需要导入c3p0.jarmchange-commons-.jar,如果操作的是Oracle数据库,那么还需要导入c3p0-oracle-thin-extras-pre1.jar

这里我使用的是MySQL数据库

这里我要说得有两种方法建立数据库连接池

第一种:通过代码连接数创建数据库连接池

首先准备一组数据库数据

如图

在eclipse ee里面添加相应的驱动包

c3p0.jarmchange-commons-.jar,还有数据库连接的jar包

首先创建C3p0_first类文件

package com.c3p0.test;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;public class C3p0_first {// 数据库连接池ComboPooledDataSourceprivate static ComboPooledDataSource ds = null;// 在静态代码块中创建数据库连接池static {try {// 通过代码创建C3P0数据库连接池// 创建连接池对象ds = new ComboPooledDataSource();// 获取数据库连接ds.setDriverClass("com.mysql.jdbc.Driver");ds.setJdbcUrl("jdbc:mysql://localhost:3306/test02");ds.setUser("root");ds.setPassword("root");ds.setInitialPoolSize(10);// 初始化的连接数,取值应在为10ds.setMinPoolSize(5);//连接池中保留的最小连接数ds.setMaxPoolSize(20);//连接池中保留的最大连接数
} catch (Exception e) {e.printStackTrace();}}// 从数据源中获取数据库连接的方法public static Connection getConnection() throws SQLException {// 从数据源中获取数据库连接return ds.getConnection();}// 释放链接public static void release(Connection conn) {if (conn != null) {try {// 将Connection连接对象还给数据库连接池
                conn.close();} catch (Exception e) {e.printStackTrace();}}}
}

然后创建Testc3p0类文件

package com.c3p0.test;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;import com.c3p0.enity.Employee;
import com.c3p0.jdbcUtils.JdbcUtils_C3P0;public class Testc3p0 {public List<Employee> queryAll(){String sql = "select * from emp";Connection conn = null;PreparedStatement st = null;ResultSet rs = null;Employee ee = null;//创建一个集合来接受查询的数据List<Employee> list=new ArrayList<>();try {// 获取数据库连接conn = C3p0_first.getConnection();st = conn.prepareStatement(sql);// 执行SQL语句rs = st.executeQuery();// 返回结果while (rs.next()) {ee = new Employee(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5),rs.getString(6), rs.getString(7));list.add(ee);System.out.println(list);}} catch (Exception e) {e.printStackTrace();} finally {// 释放资源
            JdbcUtils_C3P0.release(conn);}return list;}}

再创建实体类employee类文件

用来存放查询的数据,并且设置想应的set和get,构造方法

package com.c3p0.enity;public class Employee {private String  EmpId;private String  Empname;private String  Pwd; private String  LoginDate;private String  Adress;private String  Jod;private String  Email;public Employee() {super();}public Employee(String empname, String pwd, String loginDate, String adress, String jod, String email) {super();Empname = empname;Pwd = pwd;LoginDate = loginDate;Adress = adress;Jod = jod;Email = email;}public Employee(String empId, String empname, String pwd, String loginDate, String adress, String jod,String email) {super();EmpId = empId;Empname = empname;Pwd = pwd;LoginDate = loginDate;Adress = adress;Jod = jod;Email = email;}public String getEmpId() {return EmpId;}public void setEmpId(String empId) {EmpId = empId;}public String getEmpname() {return Empname;}public void setEmpname(String empname) {Empname = empname;}public String getPwd() {return Pwd;}public void setPwd(String pwd) {Pwd = pwd;}public String getLoginDate() {return LoginDate;}public void setLoginDate(String loginDate) {LoginDate = loginDate;}public String getAdress() {return Adress;}public void setAdress(String adress) {Adress = adress;}public String getJod() {return Jod;}public void setJod(String jod) {Jod = jod;}public String getEmail() {return Email;}public void setEmail(String email) {Email = email;}}

最后,创建测试类

package com.c3p0.test;import java.util.List;
import com.c3p0.enity.Employee;public class Test {public static void main(String[] args) {Testc3p0 tc=new Testc3p0();List<Employee> list=tc.queryAll();for(Employee ee:list){System.out.println(ee.getEmpname()+"\t"+ee.getAdress()+"\t"+ee.getEmail()+"\t"+ee.getLoginDate()+"\t");}}}

打印出查询结果

第二种数据库连接池的方法,配置文件,在src目录下面创建c3p0-config.xml的配置文件,文件名必须为这个

<c3p0-config>  <!--  C3P0的缺省(默认)配置,-->  <!-- 如果在代码中“ComboPooledDataSourceds = new ComboPooledDataSource();”这样写就表示使用的是C3P0的缺省(默认)配置信息来创建数据源 -->  <default-config>  <property name="driverClass">com.mysql.jdbc.Driver</property>  <property name="jdbcUrl">jdbc:mysql://localhost:3306/test02</property>  <property name="user">root</property>  <property name="password">root</property>  <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default:3 -->  <property name="acquireIncrement">5</property>  <!--初始化的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3-->  <property name="initialPoolSize">10</property>  <!--连接池中保留的最小连接数-->  <property name="minPoolSize">5</property>  <!--连接池中保留的最大连接数。Default:15 -->  <property name="maxPoolSize">20</property>  <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->  <property name="acquireRetryAttempts">30</property>  <!--两次连接中间隔时间,单位毫秒。Default: 1000 -->  <property name="acquireRetryDelay">1000</property>  <!--连接关闭时默认将所有未提交的操作回滚。Default: false -->  <property name="autoCommitOnClose">false</property>  </default-config>
</c3p0-config>

然后数据库的连接方法与上面一样。只需要把C3p0_first文件里面的连接数据库的内容改一下

把连接部分注释掉

package com.c3p0.test;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;public class C3p0_first {// 数据库连接池ComboPooledDataSourceprivate static ComboPooledDataSource ds = null;// 在静态代码块中创建数据库连接池static {try {// 通过代码创建C3P0数据库连接池// 创建连接池对象/*ds = new ComboPooledDataSource();// 获取数据库连接ds.setDriverClass("com.mysql.jdbc.Driver");ds.setJdbcUrl("jdbc:mysql://localhost:3306/test02");ds.setUser("root");ds.setPassword("root");ds.setInitialPoolSize(10);// 初始化的连接数,取值应在为10ds.setMinPoolSize(5);//连接池中保留的最小连接数ds.setMaxPoolSize(20);//连接池中保留的最大连接数*/ds= new ComboPooledDataSource();} catch (Exception e) {e.printStackTrace();}}// 从数据源中获取数据库连接的方法public static Connection getConnection() throws SQLException {// 从数据源中获取数据库连接return ds.getConnection();}// 释放链接public static void release(Connection conn) {if (conn != null) {try {// 将Connection连接对象还给数据库连接池
                conn.close();} catch (Exception e) {e.printStackTrace();}}}
}

测试结果

转载于:https://www.cnblogs.com/JavaMurcielago/p/6686128.html

c3p0 数据库连接池相关推荐

  1. [原创]java WEB学习笔记80:Hibernate学习之路--- hibernate配置文件:JDBC 连接属性,C3P0 数据库连接池属性等...

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  2. 数据库连接池种类、C3P0数据库连接池、德鲁伊数据库连接池

    数据库连接池种类 1.JDBC的数据库连接池使用javax.sql.DataSource来表示,DataSource只是一个接口,该接口通常由第三方提供实现 2.C3P0数据库连接池,速度相对较慢,稳 ...

  3. 数据库连接池及C3P0数据库连接池技术

    数据库连接池(重要) 注意数据库连接池只是简化获得数据库连接对象和关流的部门 1.数据库连接池: 1.概念: 其实就是一个容器(在Java中就是集合),存在数据库连接的容器,当系统初始化好后,容器被创 ...

  4. 数据库连接池 DBCP和c3p0数据库连接池

    一.数据库连接池 1. 什么是连接池 传统的开发模式下,Servlet处理用户的请求,找Dao查询数据,dao会创建与数据库之间的连接,完成数据查询后会关闭数据库的链接. 这样的方式会导致用户每次请求 ...

  5. 【JDBC】使用c3p0数据库连接池的各种报错警告

    使用c3p0数据库连接池的各种报错警告 使用c3p0数据库连接池的时候,先导入了三个jar包在lib 文件夹中, c3p0-0.9.5.2.jar mchange-commons-java-0.2.3 ...

  6. C3P0数据库连接池的配置

    在pom.xml文件中导入jar包 <dependency><groupId>com.mchange</groupId><artifactId>c3p0 ...

  7. Java数据库开发与应用之MySQL数据库、JDBC操作数据库、C3P0数据库连接池,Java反射等

    MySQL数据库,JDBC接口,MyBatis框架等,掌握的数据的存放和管理. Java数据库开发基础,介绍MySQL数据库.JDBC操作数据库.C3P0数据库连接池,Java反射等内容,进行油画商城 ...

  8. C3P0数据库连接池源代码

    步骤如下: 导入c3p0-0.9.1.2.jar 1. 创建 c3p0-config.xml 文件,  2. 创建 ComboPooledDataSource 实例:  DataSource data ...

  9. c3p0数据库连接池的使用详解

    首先,什么是c3p0?下面是百度百科的解释: C3P0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展.目前使用它的开源项目有Hibernate,Sp ...

最新文章

  1. Access数据库出现的0x80004005 Unspecified error问题
  2. 发布到服务器接口404_接口测试怎么做?
  3. windows10 vscode 构建最强大的 Mingw C++ gcc 编译环境
  4. java 皮鞋_java反射
  5. 盘点过去10年美国规模最大科技公司IPO:阿里一直是纪录保持者
  6. 02_HBase集群部署
  7. 写出一下Java方法对应的签名_Java中的方法签名是否包含其返回类型?
  8. 生信c语言面试题,c语言入门 java
  9. SSM项目-山东医院-可行性配置-1
  10. 08.Prevent exceptions from leaving destructors
  11. 代理ip池的ip是重复利用的吗_爬虫被封怎么办?用Node.js构建一个私人IP代理池...
  12. Jmeter 使用教程
  13. idea返回上一步快捷键无效
  14. Python-struct
  15. 佳信客服接口文档 REST API
  16. EXCEL使用技巧大全:输入的技巧
  17. 网站如何做seo优化
  18. bcdedit添加linux引导,强大的BCDEdit工具-启动项等相关问题-设置默认开机启动项
  19. 阿里 + 京东 Java 岗面试题概要(面试须知
  20. Docker安装chemexIT资产管理系统

热门文章

  1. 关于Java重载方法匹配优先级
  2. ActiveReport的小数显示方法
  3. 格式资料python sqlalchemy 查询结果转化为 Json格式
  4. 优化网站设计(七):避免在CSS中使用表达式
  5. WordPress 2.9.2 使用感受
  6. IDEA 构建为了打 jar 包的工程,包含 maven 打 jar 包的过程
  7. Codeforces Gym101246C:Explode 'Em All(DP + bitset)
  8. 8SimpleAdapter:一行显示的数据有图标
  9. 使用LinqToExcel读取Excel
  10. 3.6 判断两个链表是否相交