• 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/

  • 相关阅读:
    COLLABNET 在中文语言下无法编辑用户信息.
    安装ramdisk有可能使xp3389不能用
    关于23种设计模式的有趣见解
    成绩统计分析系统规划
    编程用开源软件或者免费软件
    ROS设置大全
    禁用TextBox自动填充autocomplete=false
    CollabNet Subversion Server安装与配置
    DbEntry查询表的使用
    BugTracker.Net设置问题
  • 原文地址:https://www.cnblogs.com/equation/p/6009947.html
Copyright © 2020-2023  润新知