DBCP连接池的使用

1.新建工程

2.导入commons-dbcp commons-logging commons-pool这三个包

3.创建dbcpconfig.properties的文件

实例如下

#连接设置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/jdbcstudy
username=root
password=XDP

#<!-- 初始化连接 -->
initialSize=10

#最大连接数量
maxActive=50

#<!-- 最大空闲连接 -->
maxIdle=20

#<!-- 最小空闲连接 -->
minIdle=5

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


#JDBC驱动建立连接时附带的连接属性属性的格式必须为这样:[属性名=property;] 
#注意:"user" 与 "password" 两个属性会被明确地传递,因此这里不需要包含他们。
connectionProperties=useUnicode=true;characterEncoding=UTF8

#指定由连接池所创建的连接的自动提交(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

 

 

4.在获取数据库连接的工具类(如jdbcUtils)的静态代码块中创建池

package com.sujianbo.util;


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.dbcp2.BasicDataSourceFactory;

public class JdbcUtils_DBCP {
	 /**
	  * 在java中,编写数据库连接池需实现java.sql.DataSource接口,每一种数据库连接池都是DataSource接口的实现
      * DBCP连接池就是java.sql.DataSource接口的一个具体实现
      */
	private static DataSource ds = null;
	//在静态代码块中创建数据库连接池
	static {
		
		   try {
			InputStream in =JdbcUtils_DBCP.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
			   Properties prop = new Properties();
			   prop.load(in);
			   ds = BasicDataSourceFactory.createDataSource(prop);
		} catch (Exception e) {
			e.printStackTrace();
		}
		   
	}
	
	public static synchronized Connection getConnection(){
		try {
			return ds.getConnection();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	
	public static void  release(Connection con,Statement st ,ResultSet rs){
		
		  try {
			  if(con != null){
			con.close();
			  }
			  rs = null;
		} catch (SQLException e) {
			e.printStackTrace();
		}
		 
		  try {
			  if(st != null){
			st.close();
			  }
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		  try {
			  if(rs != null){
				  rs.close();
			  }
		} catch (SQLException e) {
			e.printStackTrace();
		}
		  
	}
	
}

 测试代码

package com.sujianbo.demo;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.sujianbo.util.JdbcUtils_DBCP;

public class Test {

	@org.junit.Test
	public void test(){
		Connection con = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		
		
		try {
			con = JdbcUtils_DBCP.getConnection();
			String sql = "insert into users values (null,?,?,?,?)";
			pstmt = con.prepareStatement(sql);
			pstmt.setString(1, "快乐");
			pstmt.setString(2, "343456");
			pstmt.setString(3, "sujianbo@qq.com");
			pstmt.setInt(4, 19);
			int num =pstmt.executeUpdate();
			if(num > 0){
				System.out.println("插入成功");
			}
			
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally{
			JdbcUtils_DBCP.release(con, pstmt, rs);
		}
		
		
	}
	
	
}

 

posted @ 2016-12-27 13:33  sujianbo  阅读(357)  评论(0编辑  收藏  举报