C3P0的几种使用方法(非JNDI)

方法一:


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方法:
  配置文件:c3p0-config.xml
  <?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<named-config name="userApp">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
<property name="user">root</property>
<property name="password">123456</property>
<property name="acquireIncrement">5</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">10</property>
<property name="maxPoolSize">20</property><!-- intergalactoApp adopts a different approach to 
configuring statement caching -->
<property name="maxStatements">0</property>
<property name="maxStatementsPerConnection">5</property>
<!-- he's important, but there's only one of him -->
<user-overrides user="master-of-the-universe">
<property name="acquireIncrement">1</property>
<property name="initialPoolSize">1</property>
<property name="minPoolSize">1</property>
<property name="maxPoolSize">5</property>
<property name="maxStatementsPerConnection">50</property>
</user-overrides>
</named-config>
</c3p0-config>
连接数据库:
  package cn.langzi.jdbc.c3p0;
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 DbConnection {
private static DataSource dataSource;
static{
dataSource = new ComboPooledDataSource("userApp");
}
public static Connection getConnectioon() throws SQLException{
return dataSource.getConnection();
}
}
方法三:


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();
 }
}



转载于:https://my.oschina.net/liangtee/blog/101047

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值