DBCP的使用优化数据库的连接

步骤如下:

1,使用DBCP必须用的三个包:

       commons-dbcp-1.2.1.jar, commons-pool-1.2.jar, commons-collections-3.1.jar

2,配置参数。

3,Connection conn= BasicDataSourceFactory.createDataSource(properties);

 

配置文件(dbcpconfig.properties)如下:

#连接设置

driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver

url=jdbc:sqlserver://localhost:1433;databaseName=mp

username=sa

password=mengya

#<!-- 初始化连接 -->

initialSize=10

#最大连接数量

maxActive=50

#<!-- 最大空闲连接 -->

maxIdle=20

#<!-- 最小空闲连接 -->

minIdle=5

#<!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60 -->

maxWait=60000

#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;]

#注意:"user" "password" 两个属性会被明确地传递,因此这里不需要包含他们。

connectionProperties=useUnicode=true;characterEncoding=gbk

 

#指定由连接池所创建的连接的自动提交(auto-commit)状态。

defaultAutoCommit=true

 

#driver default 指定由连接池所创建的连接的只读(read-only)状态。

#如果没有设置该值,则“setReadOnly”方法将不被调用。(某些驱动并不支持只读模式,如:Informix

defaultReadOnly=

#driver default 指定由连接池所创建的连接的事务级别(TransactionIsolation)。

#可用值为下列之一:(详情可见javadoc。)NONE,READ_UNCOMMITTED, READ_COMMITTED, REPEATABLE_READ, SERIALIZABLE

defaultTransactionIsolation=READ_UNCOMMITTED

 

JDBC工具类如下:

package com.mengya.DBConnUitl;

 

import java.io.InputStream;

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.Properties;

 

import javax.sql.DataSource;

 

import org.apache.commons.dbcp.BasicDataSourceFactory;

 

public class DBConnUitl {

    private InputStream inStream;

    private static Properties pro=null;

    private DataSource datasource;

    public static DBConnUitl instance;

   

    private DBConnUitl(){

       inStream=this.getClass().getResourceAsStream("/dbcpconfig.properties");

       pro=new Properties();

       try {

           pro.load(inStream);

           datasource=BasicDataSourceFactory.createDataSource(pro);

       } catch (Exception e) {

           e.printStackTrace();

       }

    }

   

    public static DBConnUitl getDBConnUitl(){

       if(instance==null){

           synchronized (DBConnUitl.class) {

              if(instance==null){

                  try {

                     instance=new DBConnUitl();

                  } catch (Exception e) {

                     e.printStackTrace();

                  }

              }

           }

       }

       return instance;

    }

   

    public Connection GetConnection(){

       try {

           return datasource.getConnection();

       } catch (SQLException e) {

           e.printStackTrace();

           throw new RuntimeException("得到数据库连接失败!");

       }

    }

   

    public void free(ResultSet rs,Statement sta,Connection conn){

       try {

           if(rs!=null){

              rs.close();

           }

       } catch (Exception e) {

           e.printStackTrace();

       }finally{

           try {

              if(sta!=null){

                  sta.close();

              }

           } catch (Exception e) {

              e.printStackTrace();

           }finally{

              if(conn!=null){

                  try {

                     conn.close();

                  } catch (SQLException e) {

                     e.printStackTrace();

                  }

              }

           }

       }

    }

}

 

测试:

public static void main(String[] args) {

       DBConnUitl db=DBConnUitl.getDBConnUitl();

       for(int i=0;i<10;i++){

           Connection conn=db.GetConnection();

           System.out.println(conn);

           db.free(null, null, conn);

       }

    }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值