当前位置: 首页 > news >正文

C3P0数据库连接池【JAVA】-oracle数据库为例

java项目中数据库连接池选用C3P0的话,主要是配置上的结合。

    

1.第三方jar 我使用的是 c3p0-0.9.2-pre4.jar

2. 刚开始使用这个的时候,由于项目比较紧张,我采用的是set方式来进行配置,其实后来一了解,繁琐了很多,当初的方式如下:

//数据库连接池 使用C3P0数据库连接池
private static ComboPooledDataSource _ds = new ComboPooledDataSource();
	
/** 
 * 数据库连接池初始化 
*/  
static {  
    try {     	
        DbEntity db = ConfigCenter.GetDbEntity();   //DbEntity存储数据库连接中的各种信息
        _ds.setJdbcUrl(db.get_url());  
        _ds.setUser(db.get_username());  
        _ds.setPassword(db.get_password()); 
        _ds.setMaxStatements(0);   
        //TODO 连接池各种优化配置 按需添加
        _ds.setDriverClass(db.get_driver());
        } catch (PropertyVetoException e) {
            ...
        }          
} 
	
/**
* 获取数据库连接
* @return
*/
private static Connection getConnection() {  
    Connection conn = null;  
    try {  
        conn = _ds.getConnection();  
    } catch (Exception e) {  
        ...
    }  
    return conn;  
}  

 3. 上面这种配置连接池的方法是最繁琐的,之后我使用了配置文件配置,将配置文件c3p0-config.xml放在类加载路径下或自己定义的目录下,我个人喜欢将配置文件放入我指定的目录下,故我使用此种方式进行指定:

//加载c3p0连接池配置
System.setProperty("com.mchange.v2.c3p0.cfg.xml","configs/c3p0-config.xml");

 4. 我之所以没有采用property文件,是因为我要用到多个数据库源,我的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <named-config name="data1">
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
        <property name="jdbcUrl">jdbc:oracle:oci8:@dataname</property>
        <!-- 连接池初始化时建立的连接数 默认值是3 -->
        <property name="initialPoolSize">3</property>
        <!-- 连接的最大空闲时间  单位秒 默认是0-代表永远不会断开连接  超过设定时间的空闲连接将会断开 -->
        <property name="maxIdleTime">30</property>
        <!-- 连接池中拥有的最大连接数 默认值为15个 -->
        <property name="maxPoolSize">20</property>
        <!-- 连接池中保持的最小连接数  默认值为3个-->
        <property name="minPoolSize">3</property>
        <!-- 将连接池的连接数保持在minpoolsize 必须小于maxIdleTime设置  默认值为0代表不处理  单位秒 -->
        <property name="maxIdleTimeExcessConnections">15</property>
    </named-config>	
</c3p0-config>

XML配置文件可以为多个数据源服务,提供default-config和named-config两种配置方式,如果你只用一个数据源,大可使用default-config配置,与named-config的却别是初始化的时候无参 or有参,default-config配置如下

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
    <default-config>
        <property name="user">root</property>
        <property name="password">root</property>
        <property name="driverClass">oracle.jdbc.driver.OracleDriver</property>
        <property name="jdbcUrl">jdbc:oracle:oci8:@dataname</property>
        <!-- 连接池初始化时建立的连接数 默认值是3 -->
        <property name="initialPoolSize">3</property>
        <!-- 连接的最大空闲时间  单位秒 默认是0-代表永远不会断开连接  超过设定时间的空闲连接将会断开 -->
        <property name="maxIdleTime">30</property>
        <!-- 连接池中拥有的最大连接数 默认值为15个 -->
        <property name="maxPoolSize">20</property>
        <!-- 连接池中保持的最小连接数  默认值为3个-->
        <property name="minPoolSize">3</property>
        <!-- 将连接池的连接数保持在minpoolsize 必须小于maxIdleTime设置  默认值为0代表不处理  单位秒 -->
        <property name="maxIdleTimeExcessConnections">15</property>	
    </default-config>
</c3p0-config>


5.前序工作都做完了,现在该看看我们如何初始化了

//数据库连接池 使用C3P0数据库连接池 使用named-config模式 则通过有参构造函数初始化  带上name
private static ComboPooledDataSource _ds = new ComboPooledDataSource("data1");
//采用default-config模式  则使用无参构造函数即可
//private static ComboPooledDataSource _ds = new ComboPooledDataSource();
	
/**
 * 获取数据库连接
 * @return
 */
private static Connection getConnection() {  
    Connection conn = null;  
    try {  
        conn = _ds.getConnection();  
    } catch (Exception e) {  
        ...
    }  
    return conn;  
}

 通过简单的配置即可实现多数据源的数据库连接池,在一个C3P0-config.xml配置文件中可以既有default-config 又有named-config,只是初始化的时候指明即可(无参 or 有参)


      使用这种方式得到Connection,接着就可以进行进一步的操作了。

       conn = _ds.getConnection(); 

      Statement stmt=conn.createStatement();/PreparedStatement pstmt=conn.prepareStatement(sql);

      ResultSet rs=stmt.executeQuery("select * from ....");//执行查询

      int rows=stmt.executeUpdate("insert into .....");//执行INSERT UPDATE DELETE 语句以及 SQL DDL 语句,如 CREATE TABLE DROP TABLE

      boolean flag=stmt.execute(String sql);

             


转载自:http://blog.csdn.net/vv_demon/article/details/8467515















相关文章:

  • registered the JDBC driver [com.microsoft.jdbc.sqlserver.SQLServerDriver] but failed to unregister
  • 如何导出SVN中的所有日志
  • myeclipse项目里有红色感叹号
  • java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Error establishing socket
  • Linux根目录”/“下各个系统文件夹的含义和用途
  • hibernate.hbm2ddl.auto参数及其含义
  • IOS应用开发基础
  • Linux内核模块学习(一)
  • hibernate多对一和一对多映射浅析
  • EasyUI中datagrid获取json数据遇到的问题
  • Hibernate property-ref属性
  • spring中的autowire机制
  • Spring @Required 注解检查属性
  • Hibernate连接池的配置
  • 创建基于主-从视图的应用程序(Master-Detail Application)
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 【面试系列】之二:关于js原型
  • 77. Combinations
  • Android 初级面试者拾遗(前台界面篇)之 Activity 和 Fragment
  • CAP理论的例子讲解
  • CSS相对定位
  • ES6 ...操作符
  • HashMap剖析之内部结构
  • HomeBrew常规使用教程
  • If…else
  • nodejs实现webservice问题总结
  • SpringBoot几种定时任务的实现方式
  • uni-app项目数字滚动
  • Vue.js源码(2):初探List Rendering
  • vue学习系列(二)vue-cli
  • 安装python包到指定虚拟环境
  • 多线程事务回滚
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 两列自适应布局方案整理
  • 如何选择开源的机器学习框架?
  • 微信小程序填坑清单
  • 做一名精致的JavaScripter 01:JavaScript简介
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 交换综合实验一
  • ${factoryList }后面有空格不影响
  • (¥1011)-(一千零一拾一元整)输出
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (39)STM32——FLASH闪存
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (算法设计与分析)第一章算法概述-习题
  • (转)MVC3 类型“System.Web.Mvc.ModelClientValidationRule”同时存在
  • (转)Sql Server 保留几位小数的两种做法
  • (转)利用PHP的debug_backtrace函数,实现PHP文件权限管理、动态加载 【反射】...
  • (最完美)小米手机6X的Usb调试模式在哪里打开的流程
  • .Net Web窗口页属性
  • .php结尾的域名,【php】php正则截取url中域名后的内容
  • .pub是什么文件_Rust 模块和文件 - 「译」