xiaobojava 发表于 2013-1-14 23:27:51

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);
       }
    }
 
页: [1]
查看完整版本: DBCP的使用优化数据库的连接