c3p0连接池
使用步骤
java+mysql
1.导入 c3p0 jar包,和相关依赖包
2.在src下配置c3p0-config.xml文件
在src下面新建c3p0-config.xml文件,在xml文件里面配置以下内容
①:自定义配置
<c3p0-config>
<named-config name="线程池名">
//mysql数据库驱动
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/库名</property>
<property name="user">root</property>
<property name="password">root</property>
//初始化线程池数
<property name="initialPoolSize">5</property>
//最大线程池连接数
<property name="maxPoolSize">10</property>
</named-config>
</c3p0-config>
②: 默认配置
<c3p0-config>
<default-config >
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/student</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">10</property>
</default-config>
<c3p0-config>
3.获取连接池
//DataSource连接池接口
DataSource ds=new ComboPoolSource("连接池名");
4.通过连接池获取连接对象
ds.getConnection();
5.归还连接
ds.close();
7.JDBC c3p0连接池小案例
①:工具类
package com.qf.edu.utils;
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 JDBCUtils {
public static DataSource ds=null;
static{
//1.获取连接池
ds=new ComboPooledDataSource("c3p0");
}
//2.在连接池里面拿已经放好的连接对象
public static Connection getConnection() throws SQLException{
Connection conn = ds.getConnection();
return conn;
}
//3.归还连接,这里传入的是上面的已经拿到的连接对象.所以关闭的是拿到的连接池里面的对象
public static void close(PreparedStatement ps, Connection conn) {
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
public static void close(PreparedStatement ps, Connection conn,ResultSet rs){
close(ps, conn);
if (rs!=null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
②:添加功能
package com.qf.edu.service;
import java.sql.Connection;
import java.sql.PreparedStatement;
import com.qf.edu.utils.JDBCUtils;
public class JdbcService {
/**
* 往数据库里面添加数据的功能
* @param salary
* @param age
* @param name
* @param id
* @return row
*/
public int insert( String name, int age, double salary){
Connection conn=null;
PreparedStatement ps=null;
int row=0;
try {
//1.从连接池里面获取连接对象
conn = JDBCUtils.getConnection();
String sql="insert into stu values(null,?,?,?)";
ps = conn.prepareStatement(sql);
ps.setString(1, name);
ps.setInt(2, age);
ps.setDouble(3, salary);
row = ps.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}finally{
//归还连接
JDBCUtils.close(ps, conn);
}
return row;
}
}
③:测试类
package com.qf.edu.test;
import java.util.Scanner;
import com.qf.edu.service.JdbcService;
public class JdbcTest {
public static void main(String[] args) {
insert();
}
public static void insert(){
Scanner sc=new Scanner(System.in);
JdbcService js=new JdbcService();
System.out.println("请输入你要插入的name:");
String name=sc.next();
System.out.println("请输入你要插入的age:");
int age=sc.nextInt();
System.out.println("请输入你要插入的salary:");
double salary=sc.nextDouble();
int row = js.insert( name, age, salary);
if (row>0) {
System.out.println("插入成功");
}else {
System.out.println("插入失败");
}
}
}
④c3p0-config.xml文件配置
<c3p0-config>
<named-config name="c3p0">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/student</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">10</property>
</named-config>
<!-- 默认c3p0配置 -->
<default-config >
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/student</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">10</property>
</default-config>
</c3p0-config>