dbcp,c3p0数据库连接池的使用

1、dbcp连接池的使用

dbcp下载地址:http://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi


根据需要下载需要的文件。


BasicDataSource ds = new BasicDataSource();
		
		String driver = "com.mysql.jdbc.Driver";
		String url = "jdbc:mysql:///test";
		String user = "root";
		String pwd = "123456";
		ds.setDriverClassName(driver);
		ds.setUrl(url);
		ds.setUsername(user);
		ds.setPassword(pwd);
		
		ds.setInitialSize(3);
		ds.setMaxActive(3);
		
		Connection conn = ds.getConnection();

更好的做法是从配置文件来读取配置:

package cn.zq.util;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp.BasicDataSourceFactory;

public class DataSourceUtil {
	private static DataSource ds;
	
	static{
		InputStream in = null;
		try{
			Properties prop = new Properties();
			in = DataSourceUtil.class
				.getClassLoader()
				.getResourceAsStream("jdbc.properties");
			prop.load(in);
			ds = BasicDataSourceFactory.createDataSource(prop);
		}catch(Exception e){
			throw new RuntimeException(e.getMessage(), e);
		}finally{
			if(in != null){
				try {
					in.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
	}
	
	public static DataSource getDataSource(){
		return ds;
	}
	
	public static Connection getConnection() throws SQLException{
		return ds.getConnection();
	}
}

配置文件:jdbc.properties
driverClassName = com.mysql.jdbc.Driver
url = jdbc:mysql:///contacts?characterEncoding=UTF8
username = root
password = 123456
maxActive=3
initialSize=3

2、c3p0数据库连接池的使用

c3po下载地址:http://sourceforge.net/projects/c3p0/

第一步:导入jar包

c3p0-0.9.5-pre6.jar
mchange-commons-java-0.2.6.3.jar

第二步:在classpath路径下,新建一个c3p0-config.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<!-- 默认配置,只可以出现一次 -->
	<default-config>
		<!-- 连接超时设置30秒 -->
		<property name="checkoutTimeout">30000</property>
		<!-- 30秒检查一次connection的空闲 -->
		<property name="idleConnectionTestPeriod">30</property>
		<!--初始化的池大小 -->
		<property name="initialPoolSize">2</property>
		<!-- 最多的一个connection空闲时间 -->
		<property name="maxIdleTime">30</property>
		<!-- 最多可以有多少个连接connection -->
		<property name="maxPoolSize">10</property>
		<!-- 最少的池中有几个连接 -->
		<property name="minPoolSize">2</property>
		<!-- 批处理的语句
		 -->
		<property name="maxStatements">50</property>
		<!-- 每次增长几个连接 -->
		<property name="acquireIncrement">3</property>
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">
			<![CDATA[jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8]]>
		</property>
		<property name="user">root</property>
		<property name="password">123456</property>
	</default-config> 
</c3p0-config>

第三步:编写一个工具类获取连接

package cn.zq.util;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DataSourceUtil {
	private static DataSource ds;
	
	static{
		ds = new ComboPooledDataSource(); 
	}
	
	public static DataSource getDataSource(){
		return ds;
	}
	
	public static Connection getConnection() throws SQLException{
		return ds.getConnection();
	}
}
ComboPooledDataSource默认有3个构造函数:

  • 默认构造
  • 带有boolean的构造,默认的情况下,为true,即所有connection.autoCommit属性为true.
  • 接受一个字符串,在一个c3p0-config.xml文件中中,可以配置多种连接。 除了默认连接,其他都叫命名的连接。通过<named-config name=”xxxx”/>

指定一个命名连接:

	<named-config name="contacts">
		<property name="checkoutTimeout">1000</property>
		<property name="idleConnectionTestPeriod">30</property>
		<property name="initialPoolSize">2</property>
		<property name="maxIdleTime">30</property>
		<property name="maxPoolSize">5</property>
		<property name="minPoolSize">2</property>
		<property name="maxStatements">50</property>
		<property name="acquireIncrement">3</property>
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">
			<![CDATA[jdbc:mysql://127.0.0.1:3306/contacts?useUnicode=true&characterEncoding=UTF-8]]>
		</property>
		<property name="user">root</property>
		<property name="password">123456</property>
	</named-config> 
在代码中通过命名的方式连接数据库:

ds = new ComboPooledDataSource("contacts");

总结:c3p0比dbcp用起来更为简单,都是通过配置的方式来获取连接。c3p0的功能比dbcp更为强大,实际上c3p0用的比较多。


  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值