当前位置:Gxlcms > 数据库问题 > c3p0 数据库连接池

c3p0 数据库连接池

时间:2021-07-01 10:21:17 帮助过:13人阅读

com.c3p0.test; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import com.mchange.v2.c3p0.ComboPooledDataSource; public class C3p0_first { // 数据库连接池ComboPooledDataSource private static ComboPooledDataSource ds = null; // 在静态代码块中创建数据库连接池 static { try { // 通过代码创建C3P0数据库连接池 // 创建连接池对象 ds = new ComboPooledDataSource(); // 获取数据库连接 ds.setDriverClass("com.mysql.jdbc.Driver"); ds.setJdbcUrl("jdbc:mysql://localhost:3306/test02"); ds.setUser("root"); ds.setPassword("root"); ds.setInitialPoolSize(10);// 初始化的连接数,取值应在为10 ds.setMinPoolSize(5);//连接池中保留的最小连接数 ds.setMaxPoolSize(20);//连接池中保留的最大连接数 } catch (Exception e) { e.printStackTrace(); } } // 从数据源中获取数据库连接的方法 public static Connection getConnection() throws SQLException { // 从数据源中获取数据库连接 return ds.getConnection(); } // 释放链接 public static void release(Connection conn) { if (conn != null) { try { // 将Connection连接对象还给数据库连接池 conn.close(); } catch (Exception e) { e.printStackTrace(); } } } }

 

然后创建Testc3p0类文件

package com.c3p0.test;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import com.c3p0.enity.Employee;
import com.c3p0.jdbcUtils.JdbcUtils_C3P0;

public class Testc3p0 {

    public List<Employee> queryAll(){
        String sql = "select * from emp";
        Connection conn = null;
        PreparedStatement st = null;
        ResultSet rs = null;
        Employee ee = null;
        //创建一个集合来接受查询的数据
        List<Employee> list=new ArrayList<>();
        try {
            // 获取数据库连接
            conn = C3p0_first.getConnection();
            st = conn.prepareStatement(sql);// 执行SQL语句
            rs = st.executeQuery();// 返回结果
            while (rs.next()) {
                ee = new Employee(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5),
                        rs.getString(6), rs.getString(7));

                list.add(ee);
                System.out.println(list);
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放资源
            JdbcUtils_C3P0.release(conn);
        }
        return list;
    }
    

}

再创建实体类employee类文件

用来存放查询的数据,并且设置想应的set和get,构造方法

package com.c3p0.enity;

public class Employee {
    private String  EmpId;
    private String  Empname;
    private String  Pwd; 
    private String  LoginDate;
    private String  Adress;
    private String  Jod;
    private String  Email;
    
    public Employee() {
        super();
    }
    public Employee(String empname, String pwd, String loginDate, String adress, String jod, String email) {
        super();
        Empname = empname;
        Pwd = pwd;
        LoginDate = loginDate;
        Adress = adress;
        Jod = jod;
        Email = email;
    }
    public Employee(String empId, String empname, String pwd, String loginDate, String adress, String jod,
            String email) {
        super();
        EmpId = empId;
        Empname = empname;
        Pwd = pwd;
        LoginDate = loginDate;
        Adress = adress;
        Jod = jod;
        Email = email;
    }
    public String getEmpId() {
        return EmpId;
    }
    public void setEmpId(String empId) {
        EmpId = empId;
    }
    public String getEmpname() {
        return Empname;
    }
    public void setEmpname(String empname) {
        Empname = empname;
    }
    public String getPwd() {
        return Pwd;
    }
    public void setPwd(String pwd) {
        Pwd = pwd;
    }
    public String getLoginDate() {
        return LoginDate;
    }
    public void setLoginDate(String loginDate) {
        LoginDate = loginDate;
    }
    public String getAdress() {
        return Adress;
    }
    public void setAdress(String adress) {
        Adress = adress;
    }
    public String getJod() {
        return Jod;
    }
    public void setJod(String jod) {
        Jod = jod;
    }
    public String getEmail() {
        return Email;
    }
    public void setEmail(String email) {
        Email = email;
    }
    
}

最后,创建测试类

package com.c3p0.test;

import java.util.List;
import com.c3p0.enity.Employee;

public class Test {

    public static void main(String[] args) {
        Testc3p0 tc=new Testc3p0();
        List<Employee> list=tc.queryAll();
        
        for(Employee ee:list){
            System.out.println(ee.getEmpname()+"\t"+ee.getAdress()+"\t"+ee.getEmail()+"\t"+ee.getLoginDate()+"\t");
        }

    }

}

打印出查询结果

技术分享

 

第二种数据库连接池的方法,配置文件,在src目录下面创建c3p0-config.xml的配置文件,文件名必须为这个

<c3p0-config>  
      
   <!--  C3P0的缺省(默认)配置,-->  
   <!-- 如果在代码中“ComboPooledDataSourceds = new ComboPooledDataSource();”这样写就表示使用的是C3P0的缺省(默认)配置信息来创建数据源 -->  
     
   <default-config>  
        <property name="driverClass">com.mysql.jdbc.Driver</property>  
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/test02</property>  
        <property name="user">root</property>  
        <property name="password">root</property>  
             <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default:3 -->  
        <property name="acquireIncrement">5</property>  
             <!--初始化的连接数,取值应在minPoolSize与maxPoolSize之间。Default: 3-->  
        <property name="initialPoolSize">10</property>  
             <!--连接池中保留的最小连接数-->  
        <property name="minPoolSize">5</property>  
             <!--连接池中保留的最大连接数。Default:15 -->  
        <property name="maxPoolSize">20</property>  
             <!--定义在从数据库获取新连接失败后重复尝试的次数。Default: 30 -->  
        <property name="acquireRetryAttempts">30</property>  
             <!--两次连接中间隔时间,单位毫秒。Default: 1000 -->  
        <property name="acquireRetryDelay">1000</property>  
             <!--连接关闭时默认将所有未提交的操作回滚。Default: false -->  
         <property name="autoCommitOnClose">false</property>  
    </default-config>
</c3p0-config>

然后数据库的连接方法与上面一样。只需要把C3p0_first文件里面的连接数据库的内容改一下

把连接部分注释掉

package com.c3p0.test;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class C3p0_first {
    // 数据库连接池ComboPooledDataSource
    private static ComboPooledDataSource ds = null;
    // 在静态代码块中创建数据库连接池
    static {
        try {
            // 通过代码创建C3P0数据库连接池
            // 创建连接池对象
            /*ds = new ComboPooledDataSource();
            // 获取数据库连接
            ds.setDriverClass("com.mysql.jdbc.Driver");
            ds.setJdbcUrl("jdbc:mysql://localhost:3306/test02");
            ds.setUser("root");
            ds.setPassword("root");
            ds.setInitialPoolSize(10);// 初始化的连接数,取值应在为10
            ds.setMinPoolSize(5);//连接池中保留的最小连接数
            ds.setMaxPoolSize(20);//连接池中保留的最大连接数*/
            ds= new ComboPooledDataSource();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 从数据源中获取数据库连接的方法
    public static Connection getConnection() throws SQLException {
        // 从数据源中获取数据库连接
        return ds.getConnection();
    }

    // 释放链接
    public static void release(Connection conn) {

        if (conn != null) {
            try {
                // 将Connection连接对象还给数据库连接池
                conn.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

测试结果

技术分享

 

c3p0 数据库连接池

标签:查询   ack   对象   最大连接数   property   mysql数据库   准备   config   建立   

人气教程排行