02_c3p0之c3p0-config.xml配置案例,操作c3p0的jdbcUtil工具类的编写
c3p0也是一個開源jdbc連接池,我們熟悉的Hibernate和Spring框架使用的都是該數(shù)據(jù)源。
?
這里獲得數(shù)據(jù)源使用的方法是:ComboPooledDataSource它提供的構(gòu)造方法有:
| ComboPooledDataSource() |
| ComboPooledDataSource(boolean?autoregister) |
| ComboPooledDataSource(java.lang.String?configName) |
通過第三個構(gòu)造方法讀取配置文件,它的配置文件是一個xml文件,也可以是一個properties文件。
?
在c3po中的ComboPooledDataSource類提供了如下方法:
setDriverClass: 設(shè)置驅(qū)動使用的是
setJdbcUrl:設(shè)置url
setInitialPoolSize(int initialPoolSize)
setPassword:設(shè)置密碼
setUser:設(shè)置用戶名
?
?
不適用配置文件的使用方法:
package cn.toto.utils;
?
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
?
import javax.sql.DataSource;
?
import com.mchange.v2.c3p0.ComboPooledDataSource;
?
public class JdbcUtils {
??? private static DataSource ds;
???
??? static {
?????? try {
?????????? //初始化c3p0連接池
?????????? ComboPooledDataSource cpds = new ComboPooledDataSource();
?????????? cpds.setDriverClass("com.mysql.jdbc.Driver");
?????????? cpds.setJdbcUrl("jdbc:mysql://localhost:3306/day14");
?????????? cpds.setUser("root");
?????????? cpds.setPassword("123456");
??????????
?????????? cpds.setInitialPoolSize(5);
?????????? cpds.setMaxPoolSize(20);
??????????
?????????? ds =cpds;
?????? } catch (PropertyVetoException e) {
?????????? throw new ExceptionInInitializerError("屬性不匹配的錯誤");
?????? }
??? }
???
??? //獲取與指定數(shù)據(jù)的連接
??? public static DataSource getSource(){
?????? return ds;
??? }
???
??? //獲得與指定數(shù)據(jù)庫的連接
??? public static Connection getConnection() throws SQLException {
?????? //從連接池返回一個連接
?????? return ds.getConnection();
??? }
??? //釋放資源
??? public static void release(ResultSet rs,Statement stmt,Connection conn) {
?????? if(rs!=null){
?????????? try{
????????????? rs.close();
?????????? }catch(SQLException e){
????????????? e.printStackTrace();
?????????? }
?????????? rs = null;
?????? }
?????? if(stmt!=null){
?????????? try{
????????????? stmt.close();
?????????? }catch(SQLException e){
????????????? e.printStackTrace();
?????????? }
?????????? stmt=null;
?????? }
?????? if(conn!=null){
?????????? try{
????????????? conn.close();
?????????? }catch(SQLException e){
????????????? e.printStackTrace();
?????????? }
?????????? conn = null;
?????? }
??? }
}
?
?
用于測試的主方法:
package cn.toto.demo;
?
import java.sql.Connection;
import java.sql.SQLException;
?
import cn.toto.utils.JdbcUtils;
?
public class Demo {
?
??? public static void main(String[] args) throws SQLException {
?????? Connection conn = JdbcUtils.getConnection();
?????? System.out.println(conn);
//結(jié)果是:com.mchange.v2.c3p0.impl.NewProxyConnection@10bbf9e
??? }
?
}
?
通過配置文件的方式讀取文件。
當(dāng)通過設(shè)置配置文件xml時它可以自動查找,不用通過類加載的方式了。只要它的文件路徑是在classloader(類路徑也可以說是classes下面)的路徑下面。(在官方文檔中可以找到配置文件)
配置文件好后的文件是:
<?xml version="1.0"encoding="UTF-8"?>
<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>
??? <named-config name="toto">
?????? <property name="initialPoolSize">5</property>
?????? <property name="maxPoolSize">20</property>
?????? <property name="driverClass">com.mysql.jdbc.Driver</property>
?????? <property name="jdbcUrl">jdbc:mysql://localhost:3306/day14</property>
?????? <property name="user">root</property>
?????? <property name="password">123456</property>
??? </named-config>
</c3p0-config>
?
?
這時寫好的JdbcUtils是:
package cn.toto.utils;
?
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
?
import javax.sql.DataSource;
?
import com.mchange.v2.c3p0.ComboPooledDataSource;
?
public class JdbcUtils {
??? private static DataSourceds;
???
??? static {
?????? //ds = new ComboPooledDataSource();//默認(rèn)的缺省的配置
?????? ds = new ComboPooledDataSource("toto");//配置文件中設(shè)置的內(nèi)容不用寫其他的是因為它可以自動查找classloader下的c3p0-config.xml文件(要注意的是文件的名稱必須是c3p0-config.xml)如果文件的名稱不是這個,將出現(xiàn)錯誤。
??? }
???
??? //獲取與指定數(shù)據(jù)的連接
??? public static DataSourcegetSource(){
?????? return ds;
??? }
???
??? //獲得與指定數(shù)據(jù)庫的連接
??? public static Connection getConnection() throws SQLException {
?????? //從連接池返回一個連接
?????? return ds.getConnection();
??? }
??? //釋放資源
??? public static void release(ResultSet rs,Statement stmt,Connection conn) {
?????? if(rs!=null){
?????????? try{
????????????? rs.close();
?????????? }catch(SQLException e){
????????????? e.printStackTrace();
?????????? }
?????????? rs = null;
?????? }
?????? if(stmt!=null){
?????????? try{
????????????? stmt.close();
?????????? }catch(SQLException e){
????????????? e.printStackTrace();
?????????? }
?????????? stmt=null;
?????? }
?????? if(conn!=null){
?????????? try{
????????????? conn.close();
?????????? }catch(SQLException e){
????????????? e.printStackTrace();
?????????? }
?????????? conn = null;
?????? }
??? }
?}
總結(jié)
以上是生活随笔為你收集整理的02_c3p0之c3p0-config.xml配置案例,操作c3p0的jdbcUtil工具类的编写的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2015款ix35有没有刹车片灯?
- 下一篇: 03_dbcp数据源依赖jar包,DBC