数据库连接池

1,直接连接数据库的情形: ,直接连接数据库的情形:

 

public class DBUtil { 

/** * 单例模式创建数据库对象 */ 

private static DBUtil instance=null;

private DBUtil(){} //为了保证单例性,必须使用同步关键字 

public synchronized static DBUtil getInstance(){

 if(instance==null) instance=new DBUtil();

  return instance;

 } //连接必要的信息

 public String driver="com.mysql.jdbc.Driver";

 public String url="jdbc:mysql://localhost:3306/test";

 public String username="root";

 public String password="8921498YW";

 public Connection getConnection(){

  Connection conn=null;

  try {

  Class.forName(driver);

   conn=DriverManager.getConnection(url, username, password);

  } catch (ClassNotFoundException e) {

   e.printStackTrace();

  } catch (SQLException e) {

   e.printStackTrace();

  }

 return conn;

 } //测试连接的效率

 public static void main(String[] args) throws SQLException {

  long begin=System.currentTimeMillis();//开始时刻

  for(int i=0;i<1000;i++){//获得1000次连接

   Connection conn=DBUtil.getInstance().getConnection();

   conn.close();

  }

  long end=System.currentTimeMillis();

  System.out.println("直接连接数据库所需要的时 间:"+(end-begin)); //在我的机子上1000次直接连接耗时:12031

 }

 } 


2, 使用 DBCP 连接池: , 连接池: /** * 数据库连接池: * 它是程序启动时建立足够的数据库连接,并将这些连接组成一个连 接池,由程序动态的对池中的连接进行申请,使用,释放 * * DBCP是apache组织下的一个开源项目 * 需要两个jar包,commons-dbcp-1.2.2和commons-pool * 这种连接池效率很高,但经常出现连接丢失现象,用的不是很多, 用的多的是c3p0 * */

public class DBUtilOfDBCP { 

private static BasicDataSource dataSource=null;// 数据源

 private static DataSourceConnectionFactory factory;//连接工厂 

private static DBUtilOfDBCP instance=null; private DBUtilOfDBCP(){ 

dataSource=new BasicDataSource(); //设置jdbc相关信息

 dataSource.setUrl(url);

 dataSource.setUsername(username);

 dataSource.setPassword(password);

 dataSource.setDriverClassName(driver); //连接池设置

 dataSource.setInitialSize(20);//初始连接数

 dataSource.setMaxActive(100);//最大获取连接数

 dataSource.setMaxIdle(30);//最大可用空闲连接数

 dataSource.setMinIdle(10);//最小可用空闲连接数

 factory=new DataSourceConnectionFactory(dataSource); 

} //为了保证单例性,必须使用同步关键字

 public synchronized static DBUtilOfDBCP getInstance(){

 if(instance==null) instance=new DBUtilOfDBCP();

 return instance; 

} //连接必要的信息

 public String driver="com.mysql.jdbc.Driver";

 public String url="jdbc:mysql://localhost:3306/test";

 public String username="root";

 public String password="8921498YW";

 public Connection getConnection() throws SQLException{ //使用工厂创建连接 return factory.createConnection();

 }

 public static void main(String[] args) throws SQLException {

 long begin=System.currentTimeMillis();//开始时刻

 for(int i=0;i<1000;i++){//获得1000次连接

 Connection conn=DBUtilOfDBCP.getInstance().getConnection();

 conn.close(); 

} 

long end=System.currentTimeMillis();

 System.out.println("DBCP连接数据库所需要的时 间:"+(end-begin)); //在我的机子上1000次DBCP连接耗时:1000毫秒

 } 

} 


 

3,使用 C3P0 连接池: , 连接池: * C3P0,比较稳定 * 需要jar包:c3p0-0.9.1

public class DBUtilOfC3P0 {

 private static ComboPooledDataSource dataSource; 

private static DBUtilOfC3P0 instance=null; 

private DBUtilOfC3P0(){ dataSource=new ComboPooledDataSource(); //设置jdbc连接信息 

dataSource.setUser(username);

 dataSource.setPassword(password);

 dataSource.setJdbcUrl(url); 

try { dataSource.setDriverClass(driver);

 } catch (PropertyVetoException e) {

 e.printStackTrace(); 

} //设置连接池

 dataSource.setInitialPoolSize(30); 

dataSource.setMaxPoolSize(100);

 dataSource.setMinPoolSize(10); } //为了保证单例性,必须使用同步关键字

 public synchronized static DBUtilOfC3P0 getInstance(){

 if(instance==null) instance=new DBUtilOfC3P0();

 return instance;

 } //连接必要的信息 

public String driver="com.mysql.jdbc.Driver"; 

public String url="jdbc:mysql://localhost:3306/test"; 

public String username="root";

 public String password="8921498YW"; 

public Connection getConnection() throws SQLException{ //使用工厂创建连接

 return dataSource.getConnection();

 } 

public static void main(String[] args) throws SQLException {

 long begin=System.currentTimeMillis();

//开始时刻 for(int i=0;i<1000;i++){//获得1000次连接

 Connection conn=DBUtilOfC3P0.getInstance().getConnection(); conn.close(); 

} 

long end=System.currentTimeMillis(); 

System.out.println("C3P0连接数据库所需要的时 间:"+(end-begin)); //在我的机子上1000次C3P0连接耗时:1813毫秒

 } 

} 


 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值