2021-05-09

c3p0数据连接池

利用c3p0数据连接池连接数据库

  1. 准备

jdbc的驱动程序jar包 mysql-connector-java-8.0.20.jar
c3p0 jar包 c3p0-0.9.5.5.jar 和 mchange-commons-java-0.2.19.jar

  1. 开始
    写一个用于测试c3p0的测试类
    a.创建数据池
    部分代码如下:
public static DataSource ds=null; //设置一个DataSource类型的变量
static {
		//DataSource接口的实现类ComboPooledDataSource
		ComboPooledDataSource cpds=new ComboPooledDataSource();
		ds=cpds;
	}

数据库连接池对象创建好了,接下来就是配置下连接池的参数
目前掌握的配置参数方法,以下为简单的配置下了,参考ComboPooledDataSource类的方法
方式一:可以用ComboPooledDataSource类的方法进行配置

		//加载驱动程序
		cpds.setDriverClass("com.mysql.cj.jdbc.Driver");
		//数据库的连接url,8.0.20版本需要设置下时间serverTimezone=UTC
		cpds.setJdbcUrl("jdbc:mysql://localhost:3306/sls?serverTimezone=UTC");
		//数据库用户
		cpds.setUser("root");
		//数据库密码
		cpds.setPassword("root");
		...

方式二:可以将配置参数写到xml文件

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config> <!--默认配置-->
	<!--以下name的值和ComboPooledDataSource类的配置方法相同-->
	<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
	<property name="jdbcUrl">jdbc:mysql://localhost:3306/dtdserverTimezone=UTC
	</property>
	<property name="user">root</property>
	<property name="password">root</property>
	...
</default-config>
<named-config name="..."><!--指定名称配置-->
...
</named-config>
</c3p0-config>

配置完成后,ds就可以引用了ComboPooledDataSource类的对象

b.得到Connection连接对象

Connection conn=ds.getConnection(); //得到Connection对象

接下来就是对我们的dtd库进行操作
查询测试

	String sql="select * from student limit 3";
	//得到用执行sql语句的对象
	PreparedStatement ps=conn.prepareStatement(sql);
	//ResultSet类的变量接受结果
	ResultSet rs=ps.executeQuery();
	//判断当前元组是否存在
	while(rs.next()){
		String sname=rs.getString("sname");
		System.out.println(sname);
	}

c.我的完整代码如下

package com.tan.yu.c3p0;

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

import javax.sql.DataSource;

import com.mchange.v2.c3p0.ComboPooledDataSource;

public class MyC3P0 {
	public static DataSource ds=null;
	static {
		ComboPooledDataSource cpds=new ComboPooledDataSource();
		ds=cpds;
	}
	public static void main(String[] args) {
		Connection conn=null;
		PreparedStatement ps=null;
		ResultSet rs=null;
		try {
			conn=ds.getConnection();
			String sql="select * from student limit 3";
			ps=conn.prepareStatement(sql);
			rs=ps.executeQuery();
			while(rs.next()){
				String sname=rs.getString("sname");
				System.out.println(sname);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally{
			if(rs!=null){
				try {
					rs.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				rs=null;
			}
			if(ps!=null){
				try {
					ps.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				ps=null;
			}
			if(conn!=null){
				try {
					conn.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
				conn=null;
			}
		}
	}

}

仅供参考

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值