数据库连接池C3P0和DBCP的使用

学习小结,欢迎指正,不喜勿喷。

C3P0的使用:

步骤:
1.准备C3P0所需的jar包(本人使用的是:c3p0-0.9.5.2.jar、mchange-commons-java-0.2.12.jar)。
在这里插入图片描述
2.准备数据库驱动(本人使用:mysql-connector-java-5.1.46.jar)。
3.新建web项目。
在这里插入图片描述
4.将所需jar包放在lib目录下。
5.在src下添加数据库连接池的配置文件,文件名称必须为 c3p0-config.xml,配置文件可以使用默认配置参数来初始化连接池,也可以使用命名配置来初始化连接池。

<c3p0-config>
    <!-- 使用默认配置读取连接池对象 -->
    <default-config>
    <!-- 连库要素 -->
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
    <property name="user">数据库连接账号</property>
    <property name="password">数据库密码</property>
​
    <!-- 连接池参数 -->
 	<!-- 初始化连接数量。即初始化连接池时,创建的数据库连接数量 -->
    <property name="initialPoolSize">5</property>
 	<!-- 连接池中允许存在的最大数据库连接数量 -->
    <property name="maxPoolSize">8</property>
 	<!-- 线程最大等待时间 。当连接池中所有连接均被占用时,线程等待的最大时间,超过该时间,抛出SQLException-->
    <property name="checkoutTimeout">1000</property>
 	<!-- 连接允许空闲时间。数据库连接处于空闲状态的时间,超过改时间,断开数据库连接 -->
    <property name="maxIdleTime">1000</property>
    </default-config>
 
 	<!-- 使用命名配置 -->
 	<named-config name="mysql">
 	<!-- 连接参数 -->
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql://localhost:3306/test</property>
    <property name="user">aipande</property>
    <property name="password">wangpan@123</property>
​
    <!-- 连接池参数 -->
    <property name="initialPoolSize">5</property>
    <property name="maxPoolSize">8</property>
    <property name="checkoutTimeout">1000</property>
    <property name="maxIdleTime">1000</property>
 	</named-config>
​
</c3p0-config>

6.创建测试类

package test;

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

import com.mchange.v2.c3p0.ComboPooledDataSource;

import utils.c3p0Util;

public class test01 {

	public static void main(String[] args) throws SQLException {
		//初始化连接池,这里表示使用命名配置创建连接池对象
		ComboPooledDataSource dataSource = new ComboPooledDataSource("mysql");
		//获取数据库连接
		Connection conn = dataSource.getConnection();
		//获取会话
		Statement state = conn.createStatement();
		String sql = "SELECT UserName FROM student WHERE ID  = 1001";
		//执行sql语句
		ResultSet res = state.executeQuery(sql);
		//获取执行结果
		while(res.next()){
			System.out.println("姓名:"+res.getString("username"));
		}
	}
}

7.结果
在这里插入图片描述

DBCP的使用:

步骤:
1.准备DBCP依赖jar包、数据库驱动jar包。
在这里插入图片描述
2-4步骤同上。
5.使用配置文件来配置数据库连接池初始化时的参数。在src下创建xxx.properties配置文件,示例如下:
dbcp-config.properties

#基本的设置
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test
username=数据库连接账号
password=数据库连接密码

#初始化时连接池中connection数量
initialSize=10

#最大连接数量
maxActive=50

#最大的空闲连接数量
maxIdle=20

#最小的空闲链接数量
minIdle=5

#最大的等待时间,单位是毫秒
maxWait=60000
#建立连接时的附加参数,如果指定的编码不一致数据库中会出现乱码
connectionProperties=useUnicode=true;characterEncoding=utf8

#是否开启自动提交,跟事务的控制有关
defaultAutoCommit=true

#指定由连接池所创建的连接的事务隔离级别(TransactionIsolation)。
defaultTransactionIsolation=REPEATABLE_READ

6.创建测试类

package test;

import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;

import javax.sql.DataSource;

import org.apache.commons.dbcp2.BasicDataSourceFactory;

import util.DbcpUtil;


public class test01 {

	public static void main(String[] args) throws Exception {
		
		//获取配置文件参数
		InputStream ins = test01.class.getClassLoader().getResourceAsStream("dbcp-config.properties");
		Properties pro = new Properties();
		pro.load(ins);
		//获取数据库连接池对象
		DataSource datasource = BasicDataSourceFactory.createDataSource(pro);
		//获取数据库连接
		Connection conn = datasource.getConnection();
		//获取会话
		Statement statement = conn.createStatement();
		//定义sql语句
		String sql = "SELECT UserName FROM student WHERE ID  = 1001";
		//执行sql语句
		ResultSet res = statement.executeQuery(sql);
		//获取执行结果
		while(res.next()){
			System.out.println("姓名:"+res.getString("username"));
		}
	}
}

7.结果
在这里插入图片描述

优化:

可以发现,测试类中,每次访问数据库都需要获取数据库连接池对象,再通过连接池对象获取数据库连接。可以将这些操作放在一个工具类中,工具类中应该包含获取数据库连接、关闭数据库连接的方法。示例如下:

package utils;

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

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class c3p0Util {
	
	//获取数据源/数据库连接池对象,ComboPooledDataSource就是连接池类
	private static ComboPooledDataSource ds = new ComboPooledDataSource("mysql");
	
	//返回连接池
	public static ComboPooledDataSource getDateSource(){
		return ds;
	}
	
	//公共的获取数据库连接的方法
	public static Connection getConnection(){
		Connection conn = null;
		try {
			conn =  ds.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	//公共的关闭方法
	public static void close(Connection conn,Statement statement) throws SQLException{
		close(conn,statement,null);
	}
	
	//公共的关闭方法
	public static void close(Connection conn,Statement statement,ResultSet res) throws SQLException{
		if(conn != null){
			conn.close();
		}
		if(statement != null){
			statement.close();
		}
		if(res != null){
			res.close();
		}
	}
}

总结:
基本流程:
1.准备连接池所需jar包、数据库驱动jar包。
2.创建配置文件,用于配置数据库连接池生成的所需的参数。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值