JDBC 第三方工具类 与 数据库连接池 详解

commons-dbutils 第三方工具类

什么是commons-dbutils?

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

下载地址:https://download.csdn.net/download/forevernagisa/10305167

其所属的三个核心类

  1. Dbutils 关闭资源的方法(安静的关闭 不用异常处理)
  2. QueryRunner 执行Sql 语句 并且返回你想要的结果集
  3. ResultSetHandler 接口 使用实现类 想要什么结果集 就传入什么该接口的实现类

代码示例:

public class Demo01 {
    public static void main(String[] args) throws SQLException {
        //      insert();
        // 上传的包中有原版API文档 推荐先阅读 Dbutils 中的closeQuietly方法 和 QueryRunner 中的构造方法 和 一些查询 更新方法等
        // 这里主要还是使用了上篇博客中写的一个封装类 JDBCUtil 具体代码请查看上篇博客内容
        // 更新
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        // 使用占位符传入sql 语句
        String sql = "update sort set sname=?,sprice=?,sdesc=? where sid=5";
        // 多参数 参数 传参 
        // 方式一 利用数组 传参
        Object[] params = {"咖啡",1000,"JAVA里的咖啡"};
        // 方式二 直接添加 注意要和占位符的顺序保持对应
        int row = qr.update(connection, sql, "咖啡",1000,"JAVA里的咖啡");
        if (row>0) {
            System.out.println("修改成功"); 
        }
        DbUtils.closeQuietly(connection);
    }

    public static void insert() throws SQLException {
        // 使用QueryRunner 插入一条数据 
        QueryRunner qr = new QueryRunner();
        Connection conn = JDBCUtil.getConnection();
        String sql = "insert into sort values(null,'显示器',2000,'这是一台27寸144hz的显示器')";
        // 插入数据 
        int row = qr.update(conn, sql);
        if (row>0) {
            System.out.println("插入成功"); 
        }
        // 安静的关闭资源
        DbUtils.closeQuietly(conn);
    }
}
// 本篇代码相比与前篇博客中的介绍的方法 代码书写的更少 更加简直

上面主要介绍了在使用第三方工具类下如何实现添加和更新数据 下面将介绍如何查询数据

public class Demo02 {
    /*
     * ArrayHandler
     * 把查询出来的数据第一行 放进对象数据中 并返回
     * 可以使用模板设计模式进行封装
     */
    @Test
    public void select1() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection conn = JDBCUtil.getConnection();
        // 调用查询方法
        String sql = "select * from sort";
        // 传入什么容器 该类就把数据放到什么容器中 返回
        Object[] rel = qr.query(conn, sql, new ArrayHandler());
        for (Object object : rel) {
            System.out.println(object);
        }
        DbUtils.closeQuietly(conn);
    }
    /*
     *  ArrayListHandler
     *  查询每一条记录 放到List集合中
     *  每一条记录 是一个对象数组
     */

    @Test
    public void select2() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection conn = JDBCUtil.getConnection();
        String sql = "select * from sort";
        List<Object[]> query = qr.query(conn, sql, new ArrayListHandler());
        for (Object[] objects : query) {
            for (Object object : objects) {
                System.out.println(object);     
            }
            System.out.println("-------------");
        }
        DbUtils.closeQuietly(conn);
    }

    /*
     * BeanHandler
     * 把结果集的第一行封装成一个javaBean对象
     * javaBean规则
     * 1.成员变量私有化
     * 2.提供空参的构造方法
     * 3.提供set/get方法
     * 符合以上规则的实体类创建出来的对象 就是一个javaBean对象
     */
    @Test
    public void select3() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        // 要把使用哪个javaBean实体类传进去 类名.class
        Sort query = qr.query(connection, sql, new BeanHandler<>(Sort.class));
        if (query == null) {
            System.out.println("没有该条数据");
        }
        System.out.println(query);
        DbUtils.closeQuietly(connection);
    }

    /*
     * BeanListHandler
     * 把JAVABean对象放入List集合中返回
     */
    @Test
    public void select4() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        List<Sort> query = qr.query(connection, sql, new BeanListHandler<>(Sort.class));
        for (Sort sort : query) {
            System.out.println(sort);
        }
        DbUtils.closeQuietly(connection);
    }


    /*
     * ColumnListHandler
     * 返回指定列的数据放在List中返回
     */
    @Test
    public void select5() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        List<Object> query = qr.query(connection, sql, new ColumnListHandler<>("sname"));
        for (Object object : query) {
            System.out.println(object);
        }
        DbUtils.closeQuietly(connection);
    }

    /*
     * ScalarHandler
     * 查询结果是一个适合使用
     */
    @Test
    // count max avg
    public void select6() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select count(*) from sort";
        Long query = qr.query(connection, sql, new ScalarHandler<Long>());
        System.out.println(query);  
        DbUtils.closeQuietly(connection);
    }

    /*
     * MapHandler
     * 将结果存储到map中 返回只保存第一条记录 
     */
    @Test
    public void select7() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        Map<String, Object> query = qr.query(connection, sql, new MapHandler());
        for (String key : query.keySet()) {
            System.out.println(key +" "+query.get(key));
        }
        DbUtils.closeQuietly(connection);
    }

    /*
     * MapListHandler
     * 将结果每一条记录保存在map 中 再放入List中返回
     */
    @Test
    public void select8() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        List<Map<String,Object>> query = qr.query(connection, sql, new MapListHandler());
        for (Map<String, Object> map : query) {
            for (String key : map.keySet()) {
                System.out.println(key + " " + map.get(key));
            }
        }
        DbUtils.closeQuietly(connection);
    }   
}
// 这里列举出 八个 结果集的具体作用和用法 视具体问题情况合理使用

数据库连接池

java为了解决频繁创建数据库连接和数据库连接从来浪费的系统的资源 推出一套解决方案
提出了一套规范 数据库连接池规范(接口) javax.sql.DataSource java扩展包
由数据库厂商来提供的 DBCP C3P0
这里提供DBCP 链接池 架包 下载地址:https://download.csdn.net/download/forevernagisa/10305199

核心方法:
BasicDataSource 是 DataSource(规范类) 的实现类
要使用数据库连接池 必须要有的基础设置
1. 需要 mysql驱动类 com.mysql.jdbc.Driver
2. 数据库地址
3. 数据库密码 和 用户名

代码示例:
DataSourceUtil 类

public class DataSourceUtil {
    private static BasicDataSource dataSource = new BasicDataSource();
    static {
        // 设置 dataSource 
        dataSource.setDriverClassName("com.mysql.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/myjdbc");
        dataSource.setUsername("root");
        dataSource.setPassword("123456");
        // 扩展设置
        // 初始化连接数
        dataSource.setInitialSize(10);
        // 最大活动连接数
        dataSource.setMaxActive(8);
        // 最大空闲连接数
        dataSource.setMaxIdle(5);
        // 最小空闲连接数
        dataSource.setMinIdle(2);   
    }

    // 获取数据库连接池方法   
    public static DataSource getDataSource() {  
        return dataSource;
    }
}

测试了类

public class Demo03 {
    public static void main(String[] args) throws SQLException {
        DataSource dataSource = DataSourceUtil.getDataSource();
        QueryRunner qr = new QueryRunner(dataSource);
        // 插入一条数据
        String sql = "insert into sort values(null,?,?,?)";
        Object[] params = {"书",20,"这是一本便宜的书"};
        int update = qr.update(sql, params);
        if (update>0) {
            System.out.println("插入成功");
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值