C3P0及DBUtils工具类

Posted lilsuen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C3P0及DBUtils工具类相关的知识,希望对你有一定的参考价值。

C3P0连接池

Maven仓库下载地址:(jar包)

https://mvnrepository.com/artifact/com.mchange/c3p0

https://mvnrepository.com/artifact/com.mchange/mchange-commons-java

如何配置C3P0

1.创建c3p0-config.xml(名称必须为c3p0-config.xml)

<?xml version="1.0" encoding="utf-8" ?>
<c3p0-config>
    <default-config>
        <!--连接数据库的四大件-->
        <property name="user">root</property>
        <property name="password">Sys0626.</property>
        <property name="jdbcUrl">jdbc:mysql://localhost:3306/feige</property>
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <!--数据库连接池的参数-->
        <!--增量为3-->
        <property name="initialPoolSize">3</property>
        <!--池的最大连接数-->
        <property name="maxPoolSize">100</property>
        <!--池的最小连接数-->
        <property name="minPoolSize">2</property>
    </default-config>
</c3p0-config>

2.创建一个类,测试获取数据库连接对象

public static void main(String[] args) throws SQLException {
    //ComboPooledDataSource的无参构造方法会默认寻找src目录下的c3p0-config.xml文件
    ComboPooledDataSource ds = new ComboPooledDataSource("c3p0-config.xml");
    Connection connection = ds.getConnection();
    //成功获取到数据库连接对象
    System.out.println(connection);
}

DBUtils 工具类的使用

Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能

DBUtils工具下载

在Maven仓库中下载.jar以及依赖:

https://mvnrepository.com/artifact/commons-dbutils/commons-dbutils

QueryRunner

QueryRunner中包含4个构造方法:

public QueryRunner() {
}

public QueryRunner(boolean pmdKnownBroken) {
    super(pmdKnownBroken);
}

public QueryRunner(DataSource ds) {
    super(ds);
}

public QueryRunner(DataSource ds, boolean pmdKnownBroken) {
    super(ds, pmdKnownBroken);
}

如何使用?

  • 首先声明JDBC的四大件(driver,url,user,password)
  • 创建QueryRunner对象
  • 使用QueryRunner中的方法操作数据库

通过使用QueryRunner的无参构造

/**
* 使用QueryRunner向数据库中添加一条数据
*/
public static void main(String[] args) {
    String driver = "com.mysql.jdbc.Driver";// 驱动路径
    String url = "jdbc:mysql://localhost:3306/feige";// 数据库地址
    String user = "root";// 访问数据库的用户名
    String password = "Sys0626.";// 用户密码
    try {
        Class.forName(driver);
        //创建连接对象
        Connection conn = DriverManager.getConnection(url,user,password);
        //1.创建QueryRunner对象
        QueryRunner queryRunner = new QueryRunner();
        String sql = "insert into user(uid,uname,upwd,utel) value(?,?,?,?)";
        //2.使用QueryRunner中的update()方法,传递连接对象、SQL语句、给?占位符赋值的数据
        int nums = queryRunner.update(conn,sql,6,"卡卡","123","61231244354");
        System.out.println("成功插入"+nums+"条数据");
    } catch (Exception e) {
        e.printStackTrace();
    }
}

通过使用QueryRunner的有参构造

public static void main(String[] args) {
    String driver = "com.mysql.jdbc.Driver";// 驱动路径
    String url = "jdbc:mysql://localhost:3306/feige";// 数据库地址
    String user = "root";// 访问数据库的用户名
    String password = "Sys0626.";// 用户密码
    try {
        Class.forName(driver);
        //创建连接对象
        Connection conn = DriverManager.getConnection(url,user,password);
        //1.创建QueryRunner对象
        QueryRunner queryRunner = new QueryRunner(new ComboPooledDataSource());
        String sql = "select * from user";
        //2.使用QueryRunner中的query()方法,传递连接对象、SQL语句、给?占位符赋值的数据
        List<Map<String, Object>> query = 
            queryRunner.query(conn, sql, new MapListHandler());
        //遍历集合
        query.forEach(i -> System.out.println(i));
    } catch (Exception e) {
        e.printStackTrace();
    }
}
ArrayHandler:将结果集中的第一条记录封装到Object[]数组中,数组中的每一个元素即使这条记录中的每一个字段的值
ArrayListHandler:将结果集中的每一条记录封装到Object[]数组中,将这些数组再封装到List集合中
BeanHandler:将结果集中的第一条记录封装到一个指定的javabean中
BeanListHandler:将结果集中每一条记录封装到javabean中,将这些javabean再封装到List集合中
ColumnListHandler:将结果集中指定列的字段值封装到一个List集合中
KeyedHandler:将结果集中的每一条记录封装到Map<String,Object>,再讲这个map集合作为另一个Map的value,另一个Map集合的key是指定的字段的值
MapHandler:将结果集中的第一条记录封装到Map<String,Object>集合中,key就是字段名称,value就是字段的值
MapListHandler:将结果集中的每一条记录封装到Map<String,Object>集合中,key就是字段名称,value就是字段的值,再将这些Map封装到List集合中
ScalarHandler:它是用于单数据,列如:select count(1) from 表操作

以上是关于C3P0及DBUtils工具类的主要内容,如果未能解决你的问题,请参考以下文章

知了堂学习心得浅谈c3p0连接池和dbutils工具类的使用

Spring的jdbcTemplate 与原始jdbc 整合c3p0的DBUtils 及Hibernate 对比

你不知道的DBUtils框架

dbutils---原理以及使用

C3P0连接池工具类实现步骤及方法

数据库连接池工具---DbUtils