C3P0的兩種使用方法


方法一:
package   C3P0; 
import   java.sql.Connection; 
import   java.sql.SQLException; 
import   java.beans.PropertyVetoException; 
import   com.mchange.v2.c3p0.ComboPooledDataSource; 
public   class   DBPool{       
   private   static   DBPool   dbPool;       
   private   ComboPooledDataSource   dataSource;     

   static   {       
           dbPool=new   DBPool();       
   }       
   
   public   DBPool(){       
           try   {       
                   dataSource=new   ComboPooledDataSource();       
                   dataSource.setUser( "id ");       
                   dataSource.setPassword( "pw ");       
                   dataSource.setJdbcUrl( "jdbc:mysql://127.0.0.1:3306/test? 

autoReconnect=true&useUnicode=true&characterEncoding=GB2312 "); 
                   dataSource.setDriverClass( "com.mysql.jdbc.Driver "); 
                   dataSource.setInitialPoolSize(2); 
                   dataSource.setMinPoolSize(1); 
                   dataSource.setMaxPoolSize(10); 
                   dataSource.setMaxStatements(50); 
                   dataSource.setMaxIdleTime(60);       
           }   catch   (PropertyVetoException   e)   {       
               throw   new   RuntimeException(e);       
           }       
   }       

   public   final   static   DBPool   getInstance(){       
           return   dbPool;       
   }       

   public   final   Connection   getConnection()   {       
           try   {       
                   return   dataSource.getConnection();       
           }   catch   (SQLException   e)   {       
                   throw   new   RuntimeException( "無法從數據源獲取連接 ",e);       
           }       
   }     
   
   public   static   void   main(String[]   args)   throws   SQLException   { 
Connection   con   =   null; 
try   { 
con   =   DBPool.getInstance().getConnection(); 
}   catch   (Exception   e){ 
}   finally   { 
if   (con   !=   null) 
con.close(); 


}
 
方法二:

原來不知道使用c3p0 是如此的簡單,我一直使用properties 文件去配置c3p0,但總是連接不上數據庫,后來調試才發現ComboPooledDataSource 這個對象的屬性沒有被設置成功,我是先獲取了properties文件的內容,封裝在一個 Properties對象里面,然后直接調用 ComboPooledDataSource 的 setProperties(Properties  p) 方法來配置c3p0,程序是沒有報錯,但連不上數據庫,調試發現屬性都沒有設置成功,只是properties這個屬性被設置了而已,結果我對每個屬性調用set方法后就連接上了。。。

public final class ConnectionManager {
 private static ConnectionManager instance;

 public ComboPooledDataSource ds;
 private static String c3p0Properties = "c3p0.properties";

 private ConnectionManager() throws Exception {
  Properties p = new Properties();
  p.load(this.getClass().getResourceAsStream(c3p0Properties));
  ds = new ComboPooledDataSource();
  ds.setUser(p.getProperty("user"));
  ds.setPassword(p.getProperty("user"));
  ds.setJdbcUrl(p.getProperty("user"));
  ds.setDriverClass(p.getProperty("user"));
  ds.setInitialPoolSize(Integer.parseInt(p.getProperty("initialPoolSize")));
  ds.setMinPoolSize(Integer.parseInt(p.getProperty("minPoolSize")));
  ds.setMaxPoolSize(Integer.parseInt(p.getProperty("maxPoolSize")));
  ds.setMaxStatements(Integer.parseInt(p.getProperty("maxStatements")));
  ds.setMaxIdleTime(Integer.parseInt(p.getProperty("maxIdleTime")));
 }

 public static final ConnectionManager getInstance() {
  if (instance == null) {
   try {
    instance = new ConnectionManager();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  return instance;
 }

 public synchronized final Connection getConnection() {
  try {
   return ds.getConnection();
  } catch (SQLException e) {
   e.printStackTrace();
  }
  return null;
 }

 protected void finalize() throws Throwable {
  DataSources.destroy(ds); // 關閉datasource
  super.finalize();
 }
}

如此就可以獲取connection來做jdbc操作了:
Connection conn=ConnectionManager.getInstance().getConnection();
記得使用完后調用close方法:
conn.close();
c3p0 的某些參數的配置以及意義見另外一篇文章http://kangzye.blog.163.com/blog/static/368192232010442162576/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM