JDBC 学习复习7 学习 Apache 开源DBCP 数据源

DBCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目,也是 tomcat 使用的连接池组件。单独使用dbcp需要2个包:commons-dbcp.jar,commons-pool.jar由于建立数据库连接是一个非常耗时耗资源的行为,所以通过连接池预先同数据库建立一些连接,放在内存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,用完后再放回去。
Tomcat 的连接池正是采用该连接池来实现的。该数据库连接池既可以与应用服务器整合使用,也可由应用程序独立使用。

首先导入2个jar包

  • commons-dbcp.jar
  • commons-pool.jar
    这里给出一个我经常用的一个jar包下载的地址 jar包集中地

建项目导包,开搞!下面直接贴出配置和 代码。

##database.properties配置文件
url=jdbc:mysql://localhost:3306/libweb
username=root
password=
driverClassName=com.mysql.jdbc.Driver
initialSize=5
maxActive=50
maxIdle=20
minIdle=5
maxWait=60000
connectionProperties=userUnicode=true;characterEncodeing=UTF8
defaultAutoCommit=true
defaultReadOnly=
defaultTransactionIsolation=READ_UNCOMMITTED
package dbex.mysql;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;

/**
 * @ClassName: ApacheDBCP 
 * @Description:apache dbcp的学习使用,使用dbcp的数据库工具类
 * @author penny
 * @date 2017年12月2日 下午10:29:44 
 *
 */
public class ApacheDBCP {

	/**
	 * 在Java中每一个数据库连接池实现是java.sql.DataRosurce接口,这里的dbcp也不例外
	 */
	private static DataSource ds=null;
	static{
		InputStream ins = ApacheDBCP.class.getResourceAsStream("../../database.properties");
		Properties pro = new Properties();
		try {
			System.out.println(ApacheDBCP.class.toString()+":加载配置文件 ");
			pro.load(ins);
			ds=BasicDataSourceFactory.createDataSource(pro);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/**
	 * 
	 * @Title: getConnection 
	 * @Description: 获取连接
	 * @param @return 连接对象conn
	 * @param @throws SQLException    
	 * @throws
	 */
	public static Connection getConnection() throws SQLException{
		return ds.getConnection();
	}
	
	public void release(Connection conn,PreparedStatement ppst ,ResultSet rs){
		if(conn!=null){
			try {
				conn.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		if(ppst!=null){
			try {
				ppst.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		if(rs!=null){
			try {
				rs.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}
	/**
	 * @throws SQLException 
	 * @Title: main 
	 * @Description: 测试 dbcp
	 * @param @param args    
	 * @throws
	 */
	public static void main(String[] args) throws SQLException {
		Connection conn=null;
		PreparedStatement ppst =null;
		ResultSet rs= null;
		
		conn =ApacheDBCP.getConnection();
		System.out.println(conn);
		ppst = conn.prepareStatement("select * from user");
		rs=ppst.executeQuery();
		while(rs.next()){
			System.out.println(rs.getInt(1)+"\t"+rs.getString(2));
		}
	}
	
}

posted @ 2017-12-02 22:25  言非言  阅读(317)  评论(0编辑  收藏  举报