#使用ResultSet对象

ResultSet表示SQL查询返回的结果集。应用程序通过Statement或PreparedStatement的查询方法获取ResultSet,再通过结果集游标逐行读取数据。

ResultSet创建后,游标位于第一行之前。调用next()将游标移动到下一行:当游标成功定位到数据行时返回true,没有下一行时返回false。因此,遍历结果集通常使用while (resultSet.next())。

# 获取ResultSet

使用Statement.executeQuery(String sql)执行查询并获取结果集。示例假定变量connection已通过使用JDBC连接数据库建立连接。

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class ResultSetExample {
    public static void queryCustomer(Connection connection) throws SQLException {
        String sql = "SELECT id, name FROM customer ORDER BY id";

        try (Statement statement = connection.createStatement();
             ResultSet resultSet = statement.executeQuery(sql)) {
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                System.out.println("id: " + id + ", name: " + name);
            }
        }
    }
}

示例执行成功时,输出如下:

id: 1, name: Alice

# 读取列值

JDBC列索引从1开始。读取结果集中的列时,可以使用列索引或列名(列标签)。使用列标签可以提高代码可读性;使用列索引时,应确保SQL查询列顺序未发生变化。

常用数据类型与读取方法的对应关系如下表所示。

SQL数据类型 推荐读取方法 Java返回类型
CHAR、VARCHAR getString String
INTEGER、BIGINT getInt、getLong int、long
NUMBER getBigDecimal BigDecimal
DATE getDate java.sql.Date
TIMESTAMP getTimestamp java.sql.Timestamp

例如,以下代码分别通过列索引和列标签读取同一行数据:

while (resultSet.next()) {
    int id = resultSet.getInt(1);
    String name = resultSet.getString("name");
}

如果数据库列值为SQL NULL,基本类型读取方法可能返回0、false等默认值。读取基本类型后,应调用wasNull()判断上一次读取的列是否为SQL NULL。

int amount = resultSet.getInt("amount");
if (resultSet.wasNull()) {
    System.out.println("amount is NULL");
}

# 关闭ResultSet

ResultSet使用完毕后应及时关闭。推荐将ResultSet和创建它的Statement一起声明为try-with-resources资源,确保查询成功或发生SQLException时都能释放资源。

try (Statement statement = connection.createStatement();
     ResultSet resultSet = statement.executeQuery(
             "SELECT id, name FROM customer")) {
    while (resultSet.next()) {
        System.out.println(resultSet.getString("name"));
    }
}

滚动结果集、可更新结果集、流式结果集及结果集数据敏感性等高级用法,请参考处理结果集。

pdf-btn 下载文档 copy-btn 复制链接
edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流