📜  JDBC-结果集(1)

📅  最后修改于: 2023-12-03 15:02:07.382000             🧑  作者: Mango

JDBC 结果集

在JDBC中,当我们执行一个查询操作时,查询结果会以 ResultSet 对象的形式返回给调用者。ResultSet 是一个指向查询结果的指针,它可以通过 next() 方法遍历其中的每一行数据。

创建 ResultSet 对象

要创建一个 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 对象后必须要关闭,以释放资源。关闭 ResultSet 可以调用其 close() 方法,例如:

rs.close();
总结

ResultSet 是 JDBC 中处理查询结果的核心对象。在使用 ResultSet 对象时需要注意结果集的类型和并发访问模式,以及 ResultSet 对象的生命周期和资源释放问题。