📅  最后修改于: 2023-12-03 15:02:07.382000             🧑  作者: Mango
在JDBC中,当我们执行一个查询操作时,查询结果会以 ResultSet 对象的形式返回给调用者。ResultSet 是一个指向查询结果的指针,它可以通过 next() 方法遍历其中的每一行数据。
要创建一个 ResultSet 对象,需要在执行查询语句时指定 ResultSet 类型和并发访问模式。常用的类型有:
ResultSet.TYPE_FORWARD_ONLY:只允许结果集向前遍历,不支持滚动;
ResultSet.TYPE_SCROLL_INSENSITIVE:结果集支持向前和向后滚动,但不保证结果集是最新的;
ResultSet.TYPE_SCROLL_SENSITIVE:结果集支持向前和向后滚动,且保证结果集是最新的,但是性能稍差。
常用的并发访问模式有:
ResultSet.CONCUR_READ_ONLY:只允许读取结果集;
ResultSet.CONCUR_UPDATABLE:可以更新结果集中的数据。
例如,创建一个可滚动、只读的 ResultSet 对象的代码如下:
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
ResultSet 对象提供了各种方法来处理查询结果。下面是一些常用的方法:
next():将指针移动到下一行,如果没有下一行则返回 false;
getString(int columnIndex) / getString(String columnLabel):获取指定列的字符串类型的值;
getInt(int columnIndex) / getInt(String columnLabel):获取指定列的整数类型的值;
getDouble(int columnIndex) / getDouble(String columnLabel):获取指定列的双精度浮点数类型的值;
getDate(int columnIndex) / getDate(String columnLabel):获取指定列的日期类型的值;
updateXXX(int columnIndex, XXX value) / updateXXX(String columnLabel, XXX value):更新指定列的值,其中 XXX 可以是 String、int、double、Date 等类型。
例如,遍历一个 ResultSet 对象并打印出每行数据的代码如下:
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
double salary = rs.getDouble("salary");
Date hireDate = rs.getDate("hire_date");
System.out.println("id=" + id + ", name=" + name + ", salary=" + salary + ", hire_date=" + hireDate);
}
使用完 ResultSet 对象后必须要关闭,以释放资源。关闭 ResultSet 可以调用其 close() 方法,例如:
rs.close();
ResultSet 是 JDBC 中处理查询结果的核心对象。在使用 ResultSet 对象时需要注意结果集的类型和并发访问模式,以及 ResultSet 对象的生命周期和资源释放问题。