为什么使用c3p0连接池:帮我们优化数据库的连接,每次访问访问数据库创建连接用完再释放,连接数据库和释放连接的次数太多不利于系统资源的利用。使用连接池,先创建一些连接放到连接池,需要连接数据库时直接取出来用,用完后放回连接池。
使用步骤:
1.导入c3p0架包到项目根目录(src)下,然后Build Path
2.创建连接(设置四个参数:driverClass、jdbcUrl、user、password)
a.使用代码直接连接
ComboPooledDataSource dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUser("root");
dataSource.setPassword("123456");
b.使用配置文件,配置文件名为 c3p0-config.xml,同样放到项目根目录下
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<!-- default-config 默认的配置, -->
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///test</property>
<property name="user">root</property>
<property name="password">123456</property>
</default-config>
</c3p0-config>
代码实例:
package com.gang.jdbc;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import org.junit.Test;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0Demo {
@Test
public void c3p0test() {
// 使用代码的形式直接使用c3p0连接池
ComboPooledDataSource dataSource = null;
Connection conn = null;
PreparedStatement ps = null;
try {
// 由c3p0文档中的到 https://www.mchange.com/projects/c3p0/index.html
dataSource = new ComboPooledDataSource();
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/test");
dataSource.setUser("root");
dataSource.setPassword("123456");
// 得到连接
conn = dataSource.getConnection();
// 创建的执行sql语句的执行者
String sql = "insert into user values(null,?)";
ps = conn.prepareStatement(sql);
// 设置参数
ps.setString(1, "李刚");
// 处理结果
int i = 0;
i = ps.executeUpdate();
if (i > 0) {
System.out.println("操作成功");
} else {
System.out.println("操作失败");
}
} catch (PropertyVetoException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (ps != null)
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Test
public void c3p0Demo2() {
// 使用配置文件的方式使用c3p0连接池 https://www.mchange.com/projects/c3p0/index.html
Connection conn = null;
PreparedStatement ps = null;
try {
// 由c3p0文档中的到 https://www.mchange.com/projects/c3p0/index.html
ComboPooledDataSource dataSource = new ComboPooledDataSource();
// 得到连接
conn = dataSource.getConnection();
// 创建的执行sql语句的执行者
String sql = "insert into user values(null,?)";
ps = conn.prepareStatement(sql);
// 设置参数
ps.setString(1, "李刚");
// 处理结果
int i = 0;
i = ps.executeUpdate();
if (i > 0) {
System.out.println("操作成功");
} else {
System.out.println("操作失败");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (ps != null)
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
c3p0快速使用和.xml内容
快速使用:
.xml文件: