JDBC:通过 ResultSet 执行查询操作

本文内容大多基于官方文档和网上前辈经验总结,经过个人实践加以整理积累,仅供参考。


1 ResultSet 简介

(1) ResultSet:结果集,封装了使用 JDBC 进行查询的结果

(2) 通过调用 Statement 对象的 executeQuery(sql) 方法创建该对象

(3) ResultSet 对象以逻辑表格的形式封装了执行数据库操作的结果集,ResultSet 接口由数据库厂商实现

(4) ResultSet 对象维护了一个指向当前数据行的游标,初始的时候,游标在第一行之前,可以通过 ResultSet 对象的 next() 方法移动到下一行,如果下一行有效则返回 true,否则返回 false,相当于 Iterator 的 hasNext() 和 next() 方法的结合体

(5) 当指针(游标)指向一行时,可以通过用 getXXX(index) 或 getXXX(columnName) 获取每一列的值,index 从 1 开始,如 getInt(1),getString(“name”)

(6) ResultSet 也需要关闭

2 因为 ResultSet 也需要关闭,所以 JDBC 工具类释放数据库资源的方法需要重构

参看:JDBC:通过 Statement 执行更新操作

/**
 * 关闭数据库连接资源
 */
public static void release(ResultSet rs, Statement stmt, Connection conn) {
    if (rs != null) {
        try {
            rs.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    if (stmt != null) {
        try {
            stmt.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    if (conn != null) {
        try {
            conn.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3 准备测试数据

这里写图片描述

4 编写单元测试

(1) 获取单一记录

@Test
public void testResultSet() {
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
    try {
        // 获取Connection
        conn = JDBCTool.getConnection();
        // 获取Statement
        stmt = conn.createStatement();
        // 准备SQL
        String sql = "SELECT id, name, email, birth FROM person WHERE id=1";
        // 执行查询得到 ResultSet
        rs = stmt.executeQuery(sql);
        // 处理ResultSet
        if (rs.next()) {
            int id = rs.getInt(1);
            String name = rs.getString("name");
            String email = rs.getString(3);
            Date birth = rs.getDate(4);
            System.out.println(id);
            System.out.println(name);
            System.out.println(email);
            System.out.println(birth);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        JDBCTool.release(rs, stmt, conn);
    }
}

运行结果:
这里写图片描述

(2) 获取多条记录

@Test
public void testResultSet2() {
    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;
    try {
        // 获取Connection
        conn = JDBCTool.getConnection();
        // 获取Statement
        stmt = conn.createStatement();
        // 准备SQL
        String sql = "SELECT id, name, email, birth FROM person";
        // 执行查询得到 ResultSet
        rs = stmt.executeQuery(sql);
        // 处理ResultSet
        while (rs.next()) {
            int id = rs.getInt(1);
            String name = rs.getString("name");
            String email = rs.getString(3);
            Date birth = rs.getDate(4);
            System.out.println(id);
            System.out.println(name);
            System.out.println(email);
            System.out.println(birth);
            System.out.println();
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        JDBCTool.release(rs, stmt, conn);
    }
}

运行结果:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又言又语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值