Java中利用C3P0连接池对数据库进行查询操作

代码如下:

import com.mchange.v2.c3p0.ComboPooledDataSource;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/*
使用C3P0数据库连接池(配置文件方式)对数据库进行查询操作
 */
public class Test02 {
    public static void main(String[] args) throws Exception {
        /*操作步骤:
        导包, 在项目下创建一个lib文件目录,将第三方的jar包导入该目录下,
        编写配置文件,要求有固定的格式和固定的名字(c3p0-config.xml和c3p0.properties)该配置文件要放到项目的src目录下,
        创建连接池对象,在创建对象时会自动寻找配置文件并加载,参数需要传入需要连接的数据库的名称
        编写sql语句,
        获取连接,
        获取语句执行者
        执行语句
        对结果进行处理
        释放资源(此时的连接对象是归还给连接池,并不是销毁该连接对象)
         */
        ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource("db3");
        Connection connection = comboPooledDataSource.getConnection();
        //查询出部门编号、部门名称、部门位置、每个部门的员工人数
        String sql ="SELECT d.id,d.dname,d.loc,COUNT(*) FROM emp e JOIN dept d ON e.`dept_id`= d.`id` GROUP BY d.`id`;";
        // 查询经理的信息。显示员工姓名,员工工资,职务名称,职务描述,部门名称,部门位置,工资等级
        String sql1 = "select e.ename,e.salary,j.jname,j.description,d.dname,d.loc,s.grade from emp e join job j join\n" +
                "dept d join salarygrade s on e.`dept_id`=d.`id` and e.`job_id`=j.`id` where j.`jname`=? and\n" +
                "e.`salary` between s.`losalary` and s.`hisalary`;";
        //查询所有员工信息。显示员工姓名,员工工资,职务名称,职务描述,部门名称,部门位置,工资等级
        String sql2 = " SELECT e.ename,e.salary,j.jname,j.description,d.dname,d.loc,s.grade FROM emp e JOIN job j JOIN\n" +
                " dept d JOIN salarygrade s ON e.`dept_id`=d.`id` AND e.`job_id`=j.`id` WHERE e.`salary` BETWEEN \n" +
                " s.`losalary` AND s.`hisalary`;";
        PreparedStatement ps = connection.prepareStatement(sql);
        PreparedStatement ps1 = connection.prepareStatement(sql1);
        ps1.setObject(1,"经理");
        PreparedStatement ps2 = connection.prepareStatement(sql2);
        ResultSet resultSet = ps.executeQuery();
        ResultSet resultSet1 = ps1.executeQuery();
        ResultSet resultSet2 = ps2.executeQuery();
        while (resultSet.next()) {
            int id = resultSet.getInt("id");
            String dname = resultSet.getString("dname");
            String loc = resultSet.getString("loc");
            int count = resultSet.getInt("count(*)");
            System.out.println("id="+id+" dname="+dname+" loc="+loc+" count="+count );

        }
        System.out.println("===================================================================");
        while (resultSet1.next()) {
            String ename = resultSet1.getString("ename");
            int salary = resultSet1.getInt("salary");
            String jname = resultSet1.getString("jname");
            String description = resultSet1.getString("description");
            String dname = resultSet1.getString("dname");
            String loc = resultSet1.getString("loc");
            int grade = resultSet1.getInt("grade");
            System.out.println("ename="+ename+" salary="+salary+" jname="+jname+" description="+description
                    +" dname="+dname+" loc="+loc+" grade="+grade);

        }
        System.out.println("===================================================================");
        while (resultSet2.next()) {
            String ename = resultSet2.getString("ename");
            int salary = resultSet2.getInt("salary");
            String jname = resultSet2.getString("jname");
            String description = resultSet2.getString("description");
            String dname = resultSet2.getString("dname");
            String loc = resultSet2.getString("loc");
            int grade = resultSet2.getInt("grade");
            System.out.println("ename="+ename+" salary="+salary+" jname="+jname+" description="+description
                    +" dname="+dname+" loc="+loc+" grade="+grade);

        }
        //释放资源
        Utils11.closeResource(resultSet,ps,connection);
        Utils11.closeResource(resultSet1,ps1,null);
        Utils11.closeResource(resultSet2,ps2,null);
    }
}

配置文件概况:

控制台打印效果:

猜你喜欢

转载自blog.csdn.net/xilin6664/article/details/89454828