连接池的规范接口
![](https://i-blog.csdnimg.cn/blog_migrate/d8a7aebf3513ac279cc6b9c46bc3996c.png)
连接池的原理
![](https://i-blog.csdnimg.cn/blog_migrate/eb6e1bbb5fafcd9682343b81f02bca0a.png)
登录和注册
![](https://i-blog.csdnimg.cn/blog_migrate/dad264ce517d57fb337950c19d8c8b04.png)
package cn.kgc.c3p0;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class UtilsC3P0 {
/**
* 创建C3P0工具类 使用C3P0获得连接对象
* 连接池有一个规范接口 javax.sql.DateSource接口
* 定义了一个从连接池中获得连接的方法
* getConnection()
* 步骤
* 0. 导入jar包
* 1. 在成员位置创建一个静态ComboPooledDataSource对象
* 2. 在静态代码块使用ComboPooledDataSource对象
* setXxx方法设置数据库连接
* 3. 定义一个静态方法ComboPooledDataSource对象中获得数据库连接Connection
* 4. 释放资源
*/
//1.在成员位置创建一个静态ComboPooledDataSource对象
private static ComboPooledDataSource dataSource=new ComboPooledDataSource();
//2.在静态代码块中使用ComboPooledDataSource对象的setXxx方法 设置数据库连接
static {
try {
//设置注册驱动
dataSource.setDriverClass("com.mysql.jdbc.Driver");
//url
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/day4");
//数据库用户名
dataSource.setUser("root");
//数据库密码
dataSource.setPassword("123456");
} catch (PropertyVetoException e) {
e.printStackTrace();
}
}
//3.定义一个静态方法ComboPooledDataSource对象中获得数据库连接Connection
public static Connection getConnection(){
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException("数据库连接失败"+e);
}
}
//4.释放资源
public static void close(ResultSet rs, Statement state,Connection conn){
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (state!=null){
try {
state.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null){
try {
conn.close();//归还
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
package cn.kgc.c3p0;
import com.mchange.v2.c3p0.cfg.C3P0Config;
import org.junit.Test;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestUtilsC3P0 {
@Test
public void test01() throws SQLException {
//使用c3p0工具类获得getConnection
Connection conn = UtilsC3P0.getConnection();
System.out.println(conn);
//获得执行者对象
Statement state = conn.createStatement();
//执行SQL语句
ResultSet rs = state.executeQuery("SELECT * FROM users");
while (rs.next()){
System.out.println(rs.getInt("uid")+" "+rs.getString("username")+" "+rs.getString("password"));
}
//关闭资源
UtilsC3P0.close(rs,state,conn);
}
}