打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
数据库连接JDBC连接池组件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 = newProperties();
  p.load(this.getClass().getResourceAsStream(c3p0Properties));
  ds = newComboPooledDataSource();
  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 ConnectionManagergetInstance() {
  if (instance == null){
   try{
    instance= new ConnectionManager();
   } catch(Exception e) {
    e.printStackTrace();
   }
  }
  return instance;
 }

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

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

如此就可以获取connection来做jdbc操作了:
Connectionconn=ConnectionManager.getInstance().getConnection();
记得使用完后调用close方法:
conn.close();
c3p0 的某些参数的配置以及意义见另外一篇文章http://kangzye.blog.163.com/blog/static/368192232010442162576/


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
java 利用c3p0管理数据库连接池
数据库连接池C3P0,DBCP教程详解示例
JDBC和数据库连接池
自己做数据库连接池(c3p0)
DBUtils
java 数据库连接基础配置
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服