为什么需要数据连接池呢:因为常规的对数据库进行操作要频繁的建立连接然后关闭接口,这样就会造成极大的浪费
数据连接池的优点:我先开启数个连接,当有需要的时候就拿去用,用完再还回来,避免了接口发频繁开关
建立c3p0数据连接池的步骤:
1.首先我们需要导入jar包
连接数据库的jar包:mysql-connection-java-5.1.24-bin.jar
操作c3p0的jar包:c3p0-0.9.1.2.jar
这些jar包可以在baidu上找,如果找不到可以在评论里留言
2.配置c3p0文件
c3p0的配置文件是固定的,在baidu上就能找到,我在这里贴出我的
c3p0的配置文件名一定是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://127.0.0.1:3306/usta</property>
<property name="user">root</property>
<property name="password">root</property>
<property name="initialPoolSize">5</property><!-- 初始化连接数 -->
<property name="maxPoolSize">20</property><!-- 最大连接数 -->
</default-config>
<!-- 命名配置 -->
<named-config name="xx">
<!-- 连接数据库的4个基本配置 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/usta</property>
<property name="user">root</property>
<property name="password">root</property>
</named-config>
</c3p0-config>
3.现在就要开始正式写代码了
①首先写一个c3p0的工具类,其实到目前为止c3p0的部分就弄完了(是不是超级爽,比JDBC的操作简单无数倍啊,上面的直复制粘贴,改个信息就好了,下面的这个工具类也很简单,美滋滋)
package com.xx.train.bdqn.jdbc.utils;
//C3P0工具类
import java.sql.Connection;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class C3P0Utils {
private static ComboPooledDataSource dataSource = new ComboPooledDataSource();
public static DataSource getDataSource() {
return dataSource;
}
public static Connection getConnection() throws Exception {
return dataSource.getConnection();
}
}
②下面我写了一个测试类,除了连接是从池子里取得,其他得操作和JDBC的基本操作一致,向我的数据库里添加一条数据
package com.xx.train.bdqn.jdbc.utils;
import java.sql.Connection;
import java.sql.PreparedStatement;
import com.xx.train.bdqn.jdbc.utils.C3P0Utils;
public class AddC3P0 {
public void addUser(String user,String password) throws Exception{
Connection con = null;
PreparedStatement pstmt = null;
try {
//2.从池子中获取连接
con = C3P0Utils.getConnection();
String sql = "insert into user value(null,?,?)";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, user);
pstmt.setString(2, password);
int n = pstmt.executeUpdate();
if(n>0) {
System.out.println("添加成功");
}else {
System.out.println("添加失败");
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
③调用我写的测试类
package com.xx.train.bdqn.jdbc.test;
import com.xx.train.bdqn.jdbc.utils.AddC3P0;
public class TestC3P0 {
public static void main(String[] args) throws Exception {
AddC3P0 a = new AddC3P0();
String user = "tom";
String password = "cat";
a.addUser(user,password);
}
}