JDBC学习之路(十一)使用开源项目DBCP

本文介绍如何使用Apache DBCP进行数据库连接池管理,通过配置文件设置连接参数,并展示了一个简单的JDBC工具类实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家使用过JDBC的都知道,这个数据源在数据库连接的时候非常重要,对于性能的优化更是大大的提升,当然了,

一般只需要了解数据源是包装了从数据库获得的连接,然后放到连接池中,使用的时候直接从连接池中拿出连接,使用

完毕后,就再放入到连接池中,然后对于Connection  的使用没有改变,还是直接close。其实是对Close方法做了内部

实现改进,不是关闭连接而是把连接放入到连接池中。这样使用的时候是感觉不到的,而且数据源的优化远远不止这

些,它还能够动态的控制连接池内活动连接的多少,根据系统的负载动态的增加或者减少连接池内部的活动链接个数。

可以说是非常好的,当然了,实现一个真正能应用的数据源是非常复杂的,我们先学会怎么使用就好,下面来演示一下

如何使用Apache的开源项目,DBCP,DataBase Connection Pool的缩写。

首先需要下载commons-dbcp-1.4-bin,但是他倚赖commons-collections-3.2.1-bin,commons-pool-1.6-bin,这两

个包,需要把他们的JAR包导入到工程中,然后需要一个配置文件来配置一下连接数据库的一些默认参数

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

#<!-- 初始化连接 -->
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

最后就是使用了,其实非常简单,就是一句代码

package com.bird.jdbc;

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;
/**
 * JDBC工具类
 * @author bird
 *
 */
public final class Temple {
	private static DataSource dataSource;
	
	private Temple() {
	}

	static {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			
			Properties pro = new Properties();
			InputStream in = Temple.class.getClassLoader().getResourceAsStream("dbcpconfig.properties");
			pro.load(in);
			
			dataSource = BasicDataSourceFactory.createDataSource(pro);//注意这段代码!!!
		} catch (Exception e) {
			throw new ExceptionInInitializerError(e);
		}
	}

	public static Connection getConnection() throws SQLException {
		return dataSource.getConnection();
		
	}

	public static void free(Connection con, Statement st, ResultSet rs) {
		try {
			if (rs != null)
				rs.close();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				if (st != null)
					st.close();
			} catch (SQLException e) {
				e.printStackTrace();
			} finally {

				if (con != null)
					try {
						con.close();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
			}
		}
	}

	

}

BasicDataSourceFactory.createDataSource(pro);这句话就是使用dbcp的代码,非常简单,下面的工作就是交给

DBCP去完成了哦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值