六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 239|回复: 0

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

[复制链接]

升级  16.67%

72

主题

72

主题

72

主题

举人

Rank: 3Rank: 3

积分
250
 楼主| 发表于 2013-1-14 23:27:51 | 显示全部楼层 |阅读模式
步骤如下:
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);

       }

    }

 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表