回顾Java中dao类的jdbc连接数据库方法
- 加载数据库驱动,
- 获取连接connection
- 使用PreparedStatemen执行sql语句
- 断开connection连接
这种连接数据库的方式浪费时间,代码执行效率不高。
这就是我们要学习连接池的目的了
- 为数据库建立一个缓冲池,预先设置一定量的数据库连接,
- 需要时,从中获取,用完扔回去,
- 没有连接时,等待,请求数多于连接时,多余请求进入队列等待。
C3P0连接池工具类实现步骤及方法
- 导入jar包
- 在成员变量位置创建一个静态的ComboPooledDtatesouce对象
- 在静态代码块中使用ComboPooledDtatesouce对象setXXX方法设置数据库连接,
- 定义一个静态的ComboPooledDtatesouce对象中获取数据库连接connection
- 释放连接
方法类
package cn.sourceUntil;
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;
/*
C3P0连接池的工具类 使用C3P0获得连接对象
连接池有一个规范接口 javax.sal.DataSourse 接口
定义了一个从连接池中获得连接的方法
getConnection();
步骤
0. 导入jar包
1. 在成员变量位置创建一个静态的ComboPooledDtatSource 对象
2. 在静态代码块中使用ComboPooledDtatSource 对象 setxxxx方法 设置数据库连接
3. 定义一个静态方法 ComboPooledDtatSource 对象中获得数据库连接 Coonection
4. 释放资源(归还);
*/
public class C3P0Utils {
//1. 在成员变量位置创建一个静态的ComboPooledDtatSource 对象
private static ComboPooledDataSource dataSource=new ComboPooledDataSource();
//2. 在静态代码块中使用ComboPooledDtatSource 对象 setxxxx方法 设置数据库连接
static {
try {
//设置注册驱动程序
dataSource.setDriverClass("com.musql.jdbc.Dringver");
//设置URL
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/day05");
//设置数据库用户名
dataSource.setUser("root");
//设置数据库密码
dataSource.setPassword("root");
} catch (PropertyVetoException e) {
e.printStackTrace();
}
}
//3. 定义一个静态方法 ComboPooledDtatSource 对象中获得数据库连接 Coonection
public static Connection getConnection(){
try {
return dataSource.getConnection();
} catch (SQLException e) {
throw new RuntimeException("数据库连接失败");
}
}
//定义一个静态方法 可以返回连接池
public static ComboPooledDataSource getDatesource(){
return dataSource;
}
//4. 释放资源(归还);
public static void close(ResultSet rs, Statement stat,Connection conn){
if (rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stat!=null){
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn!=null){
try {
conn.close();//不是关 是归还
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
测试类
package cn.cn.sourceTest;
import cn.sourceUntil.C3P0Utils;
import org.junit.Test;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class TestC3P0Until {
@Test
public void tes01() throws SQLException {
//使用C3P0工具类 获得getConnection
Connection conn = C3P0Utils.getConnection();
System.out.println(conn);
Statement stat = conn.createStatement();
ResultSet rs = stat.executeQuery("SELECT * FROM users");
System.out.println("123456");
//遍历结果集
while (rs.next()){
System.out.println(rs.getInt("cid")+rs.getString("pname")+rs.getString("pasword"));
}
//释放资源
C3P0Utils.close(rs,stat,conn);
}
}
C3P0Utils
package cn.lijun.utils;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class C3P0Utils {
private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
public static DataSource getDataSource(){
return dataSource;
}
public static Connection getConnection() throws SQLException{
return dataSource.getConnection();
}
public static void close(ResultSet rs,Statement stat,Connection con){
if(rs!=null)
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
if(stat!=null)
try{
stat.close();
}catch(Exception ex){}
if(con!=null)
try{
con.close();
}catch(Exception ex){}
}
}
C3P0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/shoop</property>
<property name="user">root</property>
<property name="password">root</property>
</default-config>
</c3p0-config>
忙活忙活又一天!!!!
昨夜雨疏风骤,今日卷帘人依旧,
哈哈哈哈哈哈!!!!