日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

數(shù)據(jù)庫連接JDBC連接池組件C3P0的使用方法

 博雅書屋lhs 2014-08-24
方法一:
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( "無法從數(shù)據(jù)源獲取連接 ",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,但總是連接不上數(shù)據(jù)庫,后來調(diào)試才發(fā)現(xiàn)ComboPooledDataSource 這個對象的屬性沒有被設置成功,我是先獲取了properties文件的內(nèi)容,封裝在一個 Properties對象里面,然后直接調(diào)用 ComboPooledDataSource 的 setProperties(Properties  p) 方法來配置c3p0,程序是沒有報錯,但連不上數(shù)據(jù)庫,調(diào)試發(fā)現(xiàn)屬性都沒有設置成功,只是properties這個屬性被設置了而已,結(jié)果我對每個屬性調(diào)用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();
記得使用完后調(diào)用close方法:
conn.close();
c3p0 的某些參數(shù)的配置以及意義見另外一篇文章http://kangzye.blog.163.com/blog/static/368192232010442162576/


    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多