JDBC中C3PO数据库连接池详解

news/2024/5/18 22:59:17 标签: JDBC

-----------------------------------------------------JDBC中C3PO数据库连接池详解------------------------------------------------

C3P0简介

  C3P0也是开源免费的连接池!C3P0被很多人看好!

 

C3P0的使用

  C3P0中池类是:ComboPooledDataSource。

    publicstaticvoid main(String[] args) {

      try {

         Class.forName("oracle.jdbc.OracleDriver");

         DataSource unpoolds = DataSources.unpooledDataSource("jdbc:oracle:thin:@127.0.0.1:1521:orcl",

               "scott", "tiger");

         DataSource poolds = DataSources.pooledDataSource(unpoolds);

         Connection conn = poolds.getConnection();

         System.out.println(conn);

      } catch (ClassNotFoundException e) {

         // TODO Auto-generated catch block

         e.printStackTrace();

      } catch (SQLException e) {

         // TODO Auto-generated catch block

         e.printStackTrace();

      }

   }

 

c3p0也可以指定配置文件,而且配置文件可以是properties,也可骒xml的。当然xml的高级一些了。但是c3p0的配置文件名必须为c3p0-config.xml,并且必须放在类路径下。

  

1.             <!--连接池中保留的最大连接数。默认值: 15 -->   

2.            <property name="maxPoolSize" value="20"/>  

3.            <!-- 连接池中保留的最小连接数,默认为:3-->  

4.            <property name="minPoolSize" value="2"/>  

5.            <!-- 初始化连接池中的连接数,取值应在minPoolSizemaxPoolSize之间,默认为3-->  

6.            <property name="initialPoolSize" value="2"/>  

7.    

8.            <!--最大空闲时间,60秒内未使用则连接被丢弃。若为0则永不丢弃。默认值: 0 -->   

9.            <property name="maxIdleTime">60</property>  

10.             

11.           <!-- 当连接池连接耗尽时,客户端调用getConnection()后等待获取新连接的时间,超时后将抛出SQLException,如设为0则无限期等待。单位毫秒。默认: 0 -->   

12.           <property name="checkoutTimeout" value="3000"/>  

13.             

14.           <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。默认值: 3 -->   

15.           <property name="acquireIncrement" value="2"/>  

16.   

17.          <!--定义在从数据库获取新连接失败后重复尝试的次数。默认值: 30 ;小于等于0表示无限次-->   

18.           <property name="acquireRetryAttempts" value="0"/>  

19.   

20.           <!--重新尝试的时间间隔,默认为:1000毫秒-->   

21.           <property name="acquireRetryDelay" value="1000" />  

22.   

23.           <!--关闭连接时,是否提交未提交的事务,默认为false,即关闭连接,回滚未提交的事务 -->   

24.           <property name="autoCommitOnClose">false</property>  

25.   

26.           <!--c3p0将建一张名为Test的空表,并使用其自带的查询语句进行测试。如果定义了这个参数那么属性preferredTestQuery将被忽略。你不能在这张Test表上进行任何操作,它将只供c3p0测试使用。默认值: null -->   

27.           <property name="automaticTestTable">Test</property>  

28.   

29.           <!--如果为false,则获取连接失败将会引起所有等待连接池来获取连接的线程抛出异常,但是数据源仍有效保留,并在下次调用getConnection()的时候继续尝试获取连接。如果设为true,那么在尝试获取连接失败后该数据源将申明已断开并永久关闭。默认: false-->   

30.           <property name="breakAfterAcquireFailure">false</property>  

31.   

32.           <!--60秒检查所有连接池中的空闲连接。默认值: 0,不检查 -->   

33.           <property name="idleConnectionTestPeriod">60</property>  

34.           <!--c3p0全局的PreparedStatements缓存的大小。如果maxStatementsmaxStatementsPerConnection均为0,则缓存不生效,只要有一个不为0,则语句的缓存就能生效。如果默认值: 0-->   

35.           <property name="maxStatements">100</property>  

36.           <!--maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。默认值: 0 -->   

37.           <property name="maxStatementsPerConnection"></property>  

 

代码示例:

第一步引入驱动包

创建c3p0配置文件,文件名为c3p0-config.xml

<c3p0-config>

  <default-config>

    <property name="automaticTestTable">con_test</property>

    <property name="checkoutTimeout">30000</property>

    <property name="idleConnectionTestPeriod">30</property>

    <property name="initialPoolSize">10</property>

    <property name="maxIdleTime">30</property>

    <property name="maxPoolSize">100</property>

    <property name="minPoolSize">10</property>

    <property name="maxStatements">200</property>

 

    <user-overrides user="test-user">

      <property name="maxPoolSize">10</property>

      <property name="minPoolSize">1</property>

      <property name="maxStatements">0</property>

    </user-overrides>

 

  </default-config>

 

  <!-- This app is massive! -->

  <named-config name="intergalactoApp">

    <property name="acquireIncrement">50</property>

    <property name="initialPoolSize">100</property>

    <property name="minPoolSize">50</property>

    <property name="maxPoolSize">1000</property>

 

    <!-- intergalactoApp adopts a different approach to configuring statement caching -->

    <property name="maxStatements">0</property>

    <property name="maxStatementsPerConnection">5</property>

 

    <!-- he's important, but there's only one of him -->

    <user-overrides user="master-of-the-universe">

      <property name="acquireIncrement">1</property>

      <property name="initialPoolSize">1</property>

      <property name="minPoolSize">1</property>

      <property name="maxPoolSize">5</property>

      <property name="maxStatementsPerConnection">50</property>

    </user-overrides>

  </named-config>

</c3p0-config>

      

 

创建测试类

package com.rl.c3p0;

 

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.util.Properties;

 

import javax.sql.DataSource;

 

import com.mchange.v2.c3p0.DataSources;

 

public class JDBCPool {

 

       public static void main(String[] args) {

              PreparedStatement ps = null;

              ResultSet rs = null;

              try {

                     //注册驱动

                     Class.forName("oracle.jdbc.OracleDriver");

                     //获得非池化的数据源

                     DataSource unpoolds = DataSources.unpooledDataSource("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "tiger");

                     //将非池化的数据源转换成池化的数据源

                     DataSource poolds = DataSources.pooledDataSource(unpoolds);

                     //获得连接

                     Connection conn = poolds.getConnection();

                     System.out.println(conn);

                     String sql = "select * from person";

                  ps = conn.prepareStatement(sql);

                  rs = ps.executeQuery();

                  while(rs.next()){

                         System.out.println("ID"+rs.getInt(1)+"  name" +rs.getString(2)+"  address" +rs.getString(3)+"  birthday"+rs.getDate(4));

                  }

              } catch (ClassNotFoundException e) {

                     e.printStackTrace();

              } catch (SQLException e) {

                     e.printStackTrace();

              } finally{

                     try {

                            if(rs != null){

                                   rs.close();

                            }

                            if(ps != null){

                                   ps.close();

                            }

                     } catch (SQLException e) {

                            e.printStackTrace();

                     }

              }

       }

}

 

 


http://www.niftyadmin.cn/n/1564519.html

相关文章

XML转换StringBuffer

XML转换StringBuffer 一个xml快速转换成StringBuffer格式拼接的小工具。减轻的xml拼接工作量。 看下效果&#xff1a;<PARAM><DBID>35</DBID><SEQUENCE>atgtca</SEQUENCE><MAXNS>10</MAXNS><MINIDENTITIES>90</MINIDENTI…

Timer计时器

1、新建一个项目&#xff1a;Lesson34_Timer 2、MainActivity.java代码如下&#xff1a; package basic.android.timer;02 03import java.util.Timer;04import java.util.TimerTask;05 06import android.app.Activity;07import android.os.Bundle;08import android.os.Handler;…

xml的概述

---------------------------------------xml的概述------------------------------------------- XML概述1 什么是XML XML全称为Extensible Markup Language, 意思是可扩展的标记语言&#xff0c;它是 SGML&#xff08;标准通用标记语言&#xff09;的一个子集。 XML语法上和…

JS控制文本框禁止输入特殊字符

JS控制不能输入空格 <input type"text" onkeyup"this.valuethis.value.replace(//s/g,)" onpaste"this.valuethis.value.replace(//s/g,)" > JS 控制不能输入特殊字符 <input type"text" onkeyup"this.valuethis.val…

配置php.ini支持图片exif信息

本插件需要服务器具备EXIF扩展和mbstring扩展&#xff0c;而且mbstring扩展必须在EXIF扩展之前加载。服务器配置说明&#xff1a; 1.在php.ini文件中找到;extensionphp_exif.dll&#xff0c;去掉前面的分号 2.在php.ini文件中找到;extensionphp_mbstring.dll&#xff0c;去掉前…

xml文档声明及基本语法

---------------------------------------xml文档声明及基本语法------------------------------------------- XML文档声明1 什么是xml文档声明 可以把xml文档声明看成是xml文档说明。 最简单的xml文档声明&#xff1a;<?xml version"1.0"?>注意&#xff0…

Vue.js简单教程

Vue.js简单教程 1.Vue.js简介 Vue.js是一个轻巧、高性能、可组件化的MVVM库&#xff0c;同时拥有非常容易上手的API。Vue.js&#xff08;读音 /vjuː/, 类似于 view&#xff09; 是一套构建用户界面的渐进式框架。Vue 只关注视图层&#xff0c; 采用自底向上增量开发的设计。V…

xml约束的概述和DTD的引入

--------------------------------------------xml约束的概述和DTD的引入----------------------------------------- XML约束 1. XML约束概述一个XML文档一旦有了约束&#xff0c;那么这个XML文档就只能使用约束中创建的元素及属性。如果约束没有创建<a>元素&#xff0c…