c3p0连接池的学习

c3p0的学习 学习 学习 !

首先c3p0的基本了解,在之前的web项目学习中都是直接使用jdbc的 DriverManager进行oracle数据库的连接,每次执行操作都会建立一个新的连接,在操作完成后,通过判断释放连接,但是如果处于高并发的情况下,就可能会造成服务器崩溃的后果,因为大量的资源同一时间得不到释放;以上是我自己对普通连接的学习和看法,采用c3p0连接池后,连接池会控制连接池内的连接对象数,以下是c3p0的xml配置文件:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE xml>
 3 <c3p0-config>
 4     <named-config name="mvcApp">
 5         <property name="user">despair</property>
 6         <property name="password">123456</property>
 7         <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
 8         <property name="jdbcUrl">jdbc:oracle:thin:@localhost:1521:orcl</property>
 9         <!-- user:用户名,password:密码,driverClass为ORACLE数据库驱动,jdbcUrl是连接数据库的URL -->
10         <!--连接池中的连接耗尽时c3p0再次获取的连接数目 -->
11         <property name="acquireIncrement">2</property>
12         <!--初始化时连接池存在的连接数,取值应在minPoolSize与maxPoolSize之间 -->
13         <property name="initialPoolSize">5</property>
14         <!--连接池中最小连接数 -->
15         <property name="minPoolSize">1</property>
16         <!--连接池中最大连接数 -->
17         <property name="maxPoolSize">5</property>
18         <!--JDBC的标准参数,用以控制数据源内加载的PreparedStatements数量。
19         但由于预缓存的statements属于单个connection而不是整个连接池。所以设置这个参数需要考虑到多方面的因素。
20         如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。默认为0 -->
21         <property name="maxStatements">5</property>
22         <!--maxStatementsPerConnection 连接池内单个连接所拥有的最大缓存statements数。默认为0 -->
23         <property name="maxStatementsPerConnection">5</property>
24     </named-config>
25 </c3p0-config>

从上面的配置文件中基本就可以了解c3p0是个什么东东了,简而言之,c3p0连接池不管是否有连接请求,先在连接池中建立几个连接对象即初始化条数,当有连接请求时,直接分配,如果经过多次创建新的连接对象且连接数已经达到最大值时,仍有请求进入的话,新的请求将需要等待,另外请求的对象可以重复使用这个连接对象。

然后,我就开始了c3p0的简单代码学习:

使用c3p0需要到c3p0官网下载需要的jar包

第一个和第三个,第三个是为了获得datasourse,即连接池。

还可以加入

commons-dbutils 是 Apache提供的一个开源 JDBC工具类库,它是对JDBC的简单封装,使用dbutils能极大简化jdbc编码的工作量,同时也不会影响程序的性能。

新建一个emp员工类

 1 import java.util.UUID;
 2 /**
 3  * 员工
 4  * @author 27533
 5  */
 6 public class Emp {
 7     private String id;//编号
 8     private String username;//姓名
 9     private double salary;//薪水
10     public Emp() {}
11     public Emp(String username,double salary){
12         this.username=username;
13         this.salary=salary;
14     }
15     public String getId() {
16         return UUID.randomUUID().toString();
17     }
18     public void setId(String id) {
19         this.id = id;
20     }
21     public String getUsername() {
22         return username;
23     }
24     public void setUsername(String username) {
25         this.username = username;
26     }
27     public double getSalary() {
28         return salary;
29     }
30     public void setSalary(double salary) {
31         this.salary = salary;
32     }
33     @Override
34     public String toString() {
35         // TODO Auto-generated method stub
36         return "id为"+id+" username为"+username+" salary为"+salary;
37     }
38 }

然后是工具类

 1 import com.mchange.v2.c3p0.ComboPooledDataSource;
 2 /**
 3  * 工具类
 4  * @author 27533
 5  */
 6 public class JDBCUtil {
 7     private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
 8     public static ComboPooledDataSource getdaDataSource() {
 9         return dataSource;
10     }
11 }

然后是dao类

 1 import org.apache.commons.dbutils.QueryRunner;
 2 /**
 3  * 员工管理中的持久层
 4  * @author 27533
 5  */
 6 public class EmpDao {
 7 /**
 8  * 增加员工
 9  */
10     public void add(Emp emp)throws Exception{
11         QueryRunner runner = new QueryRunner(JDBCUtil.getdaDataSource());
12         String sql = "insert into emps(id,username,salary) values(?,?,?)";
13         Object[] params = {emp.getId(),emp.getUsername(),emp.getSalary()};
14         runner.update(sql, params);
15     }
16     /**
17      * 测试
18      * @throws Exception
19      */
20     public static void main(String[] args) throws Exception{
21         EmpDao e = new EmpDao();
22         e.add(new Emp("张三",10.3D));
23     }
24 }

很不幸,第一次出现了问题,

警告: com[email protected]5c849077 -- Acquisition Attempt Failed!!! Clearing pending acquires. While trying to acquire a needed new resource, we failed to succeed more than the maximum number of allowed acquisition attempts (30). Last acquisition attempt exception: 

中文大概是:
警告:COM.mchange.V2.资源池.basicresourcepool $ scatteredacquiretask @ 5c849077 --获取尝试失败!!!清算等待取得。在试图获取所需的新资源时,我们未能成功地超过允许的最大尝试次数(30)。最后一次尝试尝试异常:

正在解决。。。

基本原理就是这样 。解决之后补充,以上就是c3p0的学习。。。。。。。

时间: 2025-01-07 13:40:49

c3p0连接池的学习的相关文章

Hibernate学习2之继承映射与C3P0连接池

一.继承映射的需要 关系数据库的表之间不存在继承关系, 但为了将面向对象中的继承关系映射到关系数据库中, 可以使用以下三种继承映射策略: -每个继承层次一张表 -每个具体类一张表 -每个类一张表. 二.对比 --每个继承层次一张表: (优点)最简单.执行效率最高(因为无需进行任何关联操作) (缺点)存在冗余字段:在数据表中需要加入额外的区分各个类的字段: 同时不允许为子类成员属性对应的字段定义为not null约束. --每个具体类一张表: (优点)数据结构清晰,且可以对子类成员属性映射的字段定

java学习笔记—c3p0连接池与元数据分析(42)

第一步:导入c3p0包 第二步:在classpath目录下,创建一个c3p0-config.xml <?xml version="1.0" encoding="UTF-8"?> <c3p0-config> <!-- 默认配置,只可以出现一次 --> <default-config> <!-- 连接超时设置30秒 --> <property name="checkoutTimeout"

JNDI配置c3p0连接池

CNDI是什么呢? 就是java命名和目录接口,是SUN公司提供的一种标准的Java命名系统接口. 不好理解?简单说呢,他就是一个资源,放在tomcat里面的一个资源,今天我们就把数据库连接池放到tomcat中,当然你也可以放别的东西,比如Been. ok!开始 首先我们新建web项目: 新建项目叫:JNDI_demo 然后在tomcat目录:F:\apache-tomcat-5.5.25\conf\Catalina\localhost下,创建一个资源. 命名就是:项目名.xml 在我这就叫:J

DBCP连接池与c3p0连接池

1.   DBCP连接池 2.  c3p0连接池(参见上一篇的使用步骤http://www.cnblogs.com/qlqwjy/p/7545012.html)

14、Hibernate对c3p0连接池的配置

1.Hibernate3的c3p0连接池的配置 在hibernate.cfg.xml中配置如下信息: <!-- 1. 数据库连接配置 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql:///

c3p0连接池的使用

C3P0:(★) hibernate和spring使用 有自动回收空闲连接的功能. 使用步骤: 1.导入jar包(c3p0-0.9.1.2.jar) 2.使用api a.硬编码(不推荐) new ComboPooledDataSource() b.配置文件 配置文件的名称:c3p0.properties 或者 c3p0-config.xml 配置文件的路径:src下 配置文件中的名字要少用:c3p0.user()格式 编码只需要一句话 new ComboPooledDataSource()//使

C3P0连接池一些基本配置

1 C3P0连接池配置 2 数据库连接是一个耗费大量资源且相当慢的操作,所以为了提高性能和连接速度,诞生了连接池这样的概念. 3 在多用户并发操作过程中,连接池尤为重要. 4 它是将那些已连接的数据库连接存放在一个容器里(连接池),这样以后别人要连接数据库的时候,将不会重新建立数据库连接,会直接从连接池里取出可用的连接,用户使用完毕后,连接又重新还回到连接池中. 5 注意:连接池里的连接将会一直保存在内存里,即使你没用也是一样.所以这个时候你得权衡一下连接池的连接数量了. 6 7 <c3p0-c

Maven 工程下 Spring MVC 站点配置 (三) C3P0连接池与@Autowired的应用

Maven 工程下 Spring MVC 站点配置 (一) Maven 工程下 Spring MVC 站点配置 (二) Mybatis数据操作 前两篇文章主要是对站点和数据库操作配置进行了演示,如果单单实现这两个需求的话,那么基本足够,但是很多时候一个网站除了仅仅能够访问数据库是不够的,它还需要对性能以及更简化的步骤有着更多的要求,这一篇重点就是帮助我们如何去实现数据连接池管理与更简化便利的开发步骤. 如果你觉得自己能写出更高效率的连接池,那你可以不需要这篇文章了,我更建议你可以去开源组织毛遂自

C3P0连接池配置

C3P0是一个开源的JDBC连接池,详情请google. 在spring中,C3P0的一些配置,介绍如下(只列了一部分,不是全部) C3P0更详细的配置项及其含义,请参考:http://www.mchange.com/projects/c3p0/index.html <!-- c3p0连接池配置 --> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"&g