JDBC基础3

本文介绍DBUtils库中QueryRunner类及ResultSetHandler接口的多种实现类,包括ArrayHandler、ArrayListHandler、BeanHandler等,用于处理从数据库查询得到的结果集。
摘要由CSDN通过智能技术生成

commons-dbutils-1.6.jar — 操作JDBC链接数据库 并且执行SQL语句 处理返回的结果集

三个核心类
DbUtils — 关闭资源方法(安静的关闭 不需要异常处理)

Query Runner — 执行SQL语句 并且返回你想要的结果集

参数 ResultSetHandler 是个接口
(使用实现类 想要什么结果集就传入该接口的实现类)

更新
多参数传参方式1 — 利用数组
方式2 — 直接传递 注意 要和占位符的顺序对应

插入一条数据 使用QueryRunner

查询操作
8个结果集

结果集容器1
ArrayHandler
把查询出来的数据第一行 放进对象数组中 并返回

@Test
    public void select1() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        // 调用查询方法
        // 传入什么容器 该类就把数据放到什么容器中 给你返回
        Object[] query = qr.query(connection, sql,new ArrayHandler());
        for (Object object : query) {
            System.out.println(object);
        }
        DbUtils.closeQuietly(connection);
    }

结果集容器2
ArrayListHandler
把查询出来的每一条记录 放进List集合中
每一条记录 是一个对象数组

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

结果集容器3
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 sort = qr.query(connection, sql, new BeanHandler<>(Sort.class));
        if (sort == null) {
            System.out.println("没有该条数据");
        }
        System.out.println(sort);
        DbUtils.closeQuietly(connection);
    }

结果集容器4
BeanListHandle
把javaBean对象放入list集合中返回

@Test
    public void select4() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        List<Sort> list = qr.query(connection, sql, new BeanListHandler<>(Sort.class));
        for (Sort sort : list) {
            System.out.println(sort);
        }   
        DbUtils.closeQuietly(connection);
    }

结果集容器5
ColumnListHandler
返回指定类的数据 放在list中返回

@Test
    public void select5() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        List<Object> list = qr.query(connection, sql, new ColumnListHandler<>(4));
        for (Object object : list) {
            System.out.println(object);
        }
        DbUtils.closeQuietly(connection);
    }

结果集容器6
ScalarHandler
查询时只有一个结果的时候

@Test
    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);
    }

结果集容器7
MapHandler
将结果集第一行数据 封装到Map集合中
Map<键,值> 键:列名 值:这列的数据

@Test
    public void select7() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        Map<String, Object> map = qr.query(connection, sql, new MapHandler());
        for (String key : map.keySet()) {
            System.out.println(key + "  " + map.get(key));
        }

        DbUtils.closeQuietly(connection);
    }

结果集容器8
MapListHandler
将结果集每行数据 封装到Map集合中
Map<键,值> 键:列名 值:这列的数据

@Test
    public void select8() throws SQLException {
        QueryRunner qr = new QueryRunner();
        Connection connection = JDBCUtil.getConnection();
        String sql = "select * from sort";
        List<Map<String,Object>> list = qr.query(connection, sql, new MapListHandler());
        for (Map<String, Object> map : list) {
            for (String key : map.keySet()) {
                System.out.println(key + " " + map.get(key));
            }
            System.out.println("------");
        }
        DbUtils.closeQuietly(connection);
    }

数据库连接池

为了解决频繁创建数据库链接和释放数据库链接的问题
使用了 数据库连接池来解决
并且 除了一套规范 数据库连接池规范
javax.sql.DataSource java扩展包
由数据库厂商来提供
常用数据连接池 DBCP C3P0

需要导入的jar包(dbcp中依赖pool架包中的类)
commons-dbcp-1.4.jar
commons-pool-1.5.6.jar

BasicDataSource 是 DataSource(规范类) 的实现类
基础设置(要使用数据库连接池 必须要设置的内容)
mysql驱动类 com.mysql.jdbc.Driver
访问数据库链接地址
数据库的访问用户名和密码

设置dataSource
mysql 驱动类的全限定名
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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值