数据库连接池的使用---c3p0连接池初级使用

之前讲过,每次与数据库交互都需要进行创建连接的操作,而Connection对象是一个非常重要的资源,如果在网站上使用旧的代码方式,就会造成连接创建过多的问题,甚至会造成一些严重的问题。

所以就需要引入连接池的使用,数据库连接池负责分配、管理和释放数据库连接。

这里我使用的连接池是c3p0。

我在工具类中来编写c3p0的代码,这样也不会主方法中的代码过于复杂,其主要作用包含了 注册驱动,创建连接等(这些作用的配置需要在c3p0-config.xml里完成)

1. 首先需要在项目的lib包中,引入c3p0的jar包,可以在https://mvnrepository.com/artifact/com.mchange/c3p0这里下载。Maven项目的当然可以在pom.xml里引入依赖。

2. 接着便是在工具类中声明连接池

            ComboPooledDataSource dataSource = new ComboPooledDataSource();

            

public class JDBCUtils2 {
	private static final ComboPooledDataSource dataSource = new ComboPooledDataSource();
	/**
	 * 创建连接
	 * @return
	 * @throws Exception
	 */
	public static Connection getConnection() throws Exception {
        //可以直接从连接池里得到连接
		Connection conn = dataSource.getConnection();
		return conn;
	}
	
	/**
	 * 释放资源
	 */
	public static void release(Statement stmt ,Connection conn) {
		if(stmt!= null) {
			try {
				stmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			stmt = null;
		}
		if(conn!= null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			conn = null;
		}
	}
	public static void release(ResultSet rs,Statement stmt,Connection conn) {
		if(rs!= null) {
			try {
				rs.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			rs = null;
		}
		if(stmt!= null) {
			try {
				stmt.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			stmt = null;
		}
		if(conn!= null) {
			try {
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			conn = null;
		}
	}
	
}

3. 配置c3p0-config.xml,配置信息内容应该基本能看懂

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<default-config>
		<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbctest1?characterEncoding=utf8useSSL=false&serverTimezone=UTC&rewriteBatchedStatements=true</property>
		<property name="user">root</property>
		<property name="password">pwd_970301</property>
		<property name="initialPoolSize">5</property>
		<property name="maxPoolSize">20</property>	
	</default-config>
</c3p0-config>

4. 其他的基本与原先JDBC操作类似,就不用再重复了

注:

      根据上面的操作完成后,我遇到了问题:

a. 这是缺少jar包引起的,将 mchange-commons-java-xxxx.jar 包加入lib 包下 即可。(好像对版本没什么要求,反正用新的就好了),可以在这里下载 https://mvnrepository.com/artifact/com.mchange/mchange-commons-java

java.lang.NoClassDefFoundError: com/mchange/v2/ser/Indirector
	at com.zhouxin.jdbc.utils.JDBCUtils2.<clinit>(JDBCUtils2.java:15)
	at com.zhouxin.jdbc.demo1.JdbcDemo3.demo1(JdbcDemo3.java:25)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)

	... 25 more

b. 下面是c3p0的日志错误输出,“ [Fatal Error] :5:95: 对实体 "useSSL" 的引用必须以 ';' 分隔符结尾。”;

我上网查了解决方法,很简单,只要在每个&的后面加上amp; 即可。

即 <property name="jdbcUrl">jdbc:mysql://localhost:3306/jdbctest1?characterEncoding=utf8&amp;useSSL=false&amp;serverTimezone=UTC&amp;rewriteBatchedStatements=true</property>

五月 28, 2019 7:02:59 下午 com.mchange.v2.log.MLog 
信息: MLog clients using java 1.4+ standard logging.
[Fatal Error] :5:95: 对实体 "useSSL" 的引用必须以 ';' 分隔符结尾。
五月 28, 2019 7:02:59 下午 com.mchange.v2.c3p0.cfg.C3P0Config 
警告: XML configuration disabled! Verify that standard XML libs are available.
org.xml.sax.SAXParseException; lineNumber: 5; columnNumber: 95; 对实体 "useSSL" 的引用必须以 ';' 分隔符结尾。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值