C3P0数据库连接池【JAVA】-oracle数据库为例
来源:互联网 发布:易语言access sql查询 编辑:程序博客网 时间:2024/05/17 06:03
转自:http://blog.csdn.net/willability/article/details/8467515
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;
- }
//数据库连接池 使用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");
//加载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 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>
<?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数据库连接池 使用named-config模式 则通过有参构造函数初始化 带上nameprivate 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 有参)
突然想到,既然总结了oracle数据库连接池的初始化,下一次把对各种语句or存储过程or函数的执行调度也总结下吧,敬请期待...
- C3P0数据库连接池【JAVA】-oracle数据库为例
- C3P0数据库连接池【JAVA】-oracle数据库为例
- C3P0数据库连接池【JAVA】-oracle数据库为例
- Java c3p0 oracle 数据库连接池 代码实现
- java c3p0数据库连接池
- Java c3p0 oracle 数据库连接池 代码实现 (二)
- Java c3p0 oracle 数据库连接池 代码实现 (一)
- java Servlet使用c3p0创建多个Mysql数据库连接池,Sevlet使用c3p0创建oracle数据库连接池
- 【数据库学习】数据库连接池C3P0的应用
- Java数据库连接(Oracle数据库)
- Java使用数据库连接池连接Oracle数据库
- JAVA开源数据库连接池C3P0简介
- Java使用c3p0建立MySQL数据库连接池
- Java常用的数据库连接池【c3p0】【dbcp】
- Java数据库连接池2——c3p0
- java 使用c3p0数据库连接池配置实例
- [数据库连接池二]Java数据库连接池--C3P0和JDNI.
- 单例模式实现C3P0数据库连接池
- 一篇好文章带你走出阴霾
- 协调多个对象之间的交互——中介者模式(三)
- 静态库与动态库区别
- poj 3298 数状数组
- 福布斯:谷歌应拆分为三家公司吗?
- C3P0数据库连接池【JAVA】-oracle数据库为例
- 第一周
- 金士顿推出1TB闪存式U盘 达到USB 3.0标准
- jquerymobile-3 page title和网页预提取(Prefetching content)
- 史上十大最昂贵笔记本电脑:最高售价100万美元
- 企业拥抱Windows 8的十大理由
- 浅谈C++底层机制
- mysql学习足迹之一【linux环境下源码安装mysql-5.5.25版本数据库】
- HDOJ2065 “红色病毒”问题