c3p0连接池技术

第一步:拷贝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>


第三步:

baseDao中使用不用加载驱动,只需要连接


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){

}


}

猜你喜欢

转载自blog.csdn.net/qq_33352259/article/details/80751891