第一步:拷贝jar包
第二步:配置c3p0-config.xml文档
<?xml version="1.0" encoding="UTF-8" ?>
<c3p0-config>
<default-config>
<!--连接池数据 -->
<property name="driverClass">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="jdbcUrl">
jdbc:sqlserver://localhost:1433;databasename=EducationMs_1
</property>
<property name="user">sa</property>
<property name="password">123</property>
<property name="acquireIncrement">3</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">10</property>
<property name="maxPoolSize">50</property>
</default-config>
<named-config name="c3p0_mysql">
<!-- 指定数据库连接源的基本属性 -->
<!--MySQL数据库驱动程序-->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<!--MySQL数据库地址-->
<property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8</property>
<!--MySQL数据库用户名-->
<property name="user">root</property>
<!--MySQL数据库密码-->
<property name="password"></property>
<!-- 若数据库连接数不足时,一次向数据库服务器申请多少个连接 -->
<property name="acquireIncrement">5</property>
<!-- 初始化数据库连接池时的连接数量 -->
<property name="initialPoolSize">10</property>
<!-- 数据库连接池中的最小连接数量 -->
<property name="minPoolSize">10</property>
<!-- 数据库连接池中的最大连接数量 -->
<property name="maxPoolSize">50</property>
<!-- C3P0数据库连接池可以维护的statement的个数 -->
<property name="maxStatements">50</property>
<!-- 每个连接可以同时使用的statement对象的个数 -->
<property name="maxStatementsPerConnection">10</property>
</named-config>
</c3p0-config>
第三步:
package com_it_data;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class base_dao<E> {
protected static Connection conn;
protected Statement stmt;
protected ResultSet rs;
//连接池技术
private static ComboPooledDataSource datasource = new ComboPooledDataSource();
//加载驱动,驱动只需要加载一次,所以使用静态块,在它第一次的时候加载
private Connection getConn(){
try {
conn = datasource.getConnection();
System.out.println("-----driver---ok----");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
//创建执行命令对象
private void statement(){
try {
stmt =getConn().createStatement();
System.out.println("-----statement--ok----");
} catch (SQLException e) {
e.printStackTrace();
}
}
//释放资源
private void reset(){
try {
if(rs!=null){
rs.close();
rs=null;
}
if(stmt!=null){
stmt.close();
stmt=null;
}
if(conn!=null){
conn.close();
// conn=null;
}
System.out.println("-----reset----ok---");
} catch (Exception e) {
e.printStackTrace();
}
}
//执行更新类语句(增删查改)
public void update(String sql){
//加载驱动
//创建连接
//创建执行命令对象
statement();
//执行命令
try {
//执行sql语句
stmt.executeUpdate(sql);
System.out.println("-----stmt>"+sql+"----ok----");
} catch (SQLException e) {
e.printStackTrace();
}
//释放资源
reset();
}
//执行查找功能(select 语句 有返回值的语句)
protected List<E> query(String sql){
//创建一个集合数组
List<E> list = new ArrayList<E>();
//加载驱动
//创建连接
//创建执行命令对象
statement();
//执行命令
try {
//执行sql语句并返回查询结果的首地址
rs=stmt.executeQuery(sql);
this.rs2list(list);
System.out.println("-----stmt>"+sql+"----ok----");
} catch (SQLException e) {
e.printStackTrace();
}
//释放资源
reset();
return list;
}
//将执行SqL语句返回的结果添加到集合中
protected void rs2list(List<E> list){
}
}
第二步:配置c3p0-config.xml文档
<?xml version="1.0" encoding="UTF-8" ?>
<c3p0-config>
<default-config>
<!--连接池数据 -->
<property name="driverClass">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
<property name="jdbcUrl">
jdbc:sqlserver://localhost:1433;databasename=EducationMs_1
</property>
<property name="user">sa</property>
<property name="password">123</property>
<property name="acquireIncrement">3</property>
<property name="initialPoolSize">10</property>
<property name="minPoolSize">10</property>
<property name="maxPoolSize">50</property>
</default-config>
<named-config name="c3p0_mysql">
<!-- 指定数据库连接源的基本属性 -->
<!--MySQL数据库驱动程序-->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<!--MySQL数据库地址-->
<property name="jdbcUrl">jdbc:mysql://localhost:3306/mydb?characterEncoding=UTF-8</property>
<!--MySQL数据库用户名-->
<property name="user">root</property>
<!--MySQL数据库密码-->
<property name="password"></property>
<!-- 若数据库连接数不足时,一次向数据库服务器申请多少个连接 -->
<property name="acquireIncrement">5</property>
<!-- 初始化数据库连接池时的连接数量 -->
<property name="initialPoolSize">10</property>
<!-- 数据库连接池中的最小连接数量 -->
<property name="minPoolSize">10</property>
<!-- 数据库连接池中的最大连接数量 -->
<property name="maxPoolSize">50</property>
<!-- C3P0数据库连接池可以维护的statement的个数 -->
<property name="maxStatements">50</property>
<!-- 每个连接可以同时使用的statement对象的个数 -->
<property name="maxStatementsPerConnection">10</property>
</named-config>
</c3p0-config>
第三步:
baseDao中使用不用加载驱动,只需要连接
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class base_dao<E> {
protected static Connection conn;
protected Statement stmt;
protected ResultSet rs;
//连接池技术
private static ComboPooledDataSource datasource = new ComboPooledDataSource();
//加载驱动,驱动只需要加载一次,所以使用静态块,在它第一次的时候加载
private Connection getConn(){
try {
conn = datasource.getConnection();
System.out.println("-----driver---ok----");
} catch (Exception e) {
e.printStackTrace();
}
return conn;
}
//创建执行命令对象
private void statement(){
try {
stmt =getConn().createStatement();
System.out.println("-----statement--ok----");
} catch (SQLException e) {
e.printStackTrace();
}
}
//释放资源
private void reset(){
try {
if(rs!=null){
rs.close();
rs=null;
}
if(stmt!=null){
stmt.close();
stmt=null;
}
if(conn!=null){
conn.close();
// conn=null;
}
System.out.println("-----reset----ok---");
} catch (Exception e) {
e.printStackTrace();
}
}
//执行更新类语句(增删查改)
public void update(String sql){
//加载驱动
//创建连接
//创建执行命令对象
statement();
//执行命令
try {
//执行sql语句
stmt.executeUpdate(sql);
System.out.println("-----stmt>"+sql+"----ok----");
} catch (SQLException e) {
e.printStackTrace();
}
//释放资源
reset();
}
//执行查找功能(select 语句 有返回值的语句)
protected List<E> query(String sql){
//创建一个集合数组
List<E> list = new ArrayList<E>();
//加载驱动
//创建连接
//创建执行命令对象
statement();
//执行命令
try {
//执行sql语句并返回查询结果的首地址
rs=stmt.executeQuery(sql);
this.rs2list(list);
System.out.println("-----stmt>"+sql+"----ok----");
} catch (SQLException e) {
e.printStackTrace();
}
//释放资源
reset();
return list;
}
//将执行SqL语句返回的结果添加到集合中
protected void rs2list(List<E> list){
}
}