JDBC 使用 ResultSet 来封装 SQL 的查询结果,可以将 ResultSet 类比为数据库表的查询结果。
它拥有如下两个性质:
这两个性质,是在创建 Statement 的时候决定的。
一般来说,我们使用以下 Connection 的方法创建 Statement:
Statement createStatement() throws SQLException;
但实际上,Connection 还提供以下方法:
Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException;
1. 可滚动
ResultSet 通过移动指针来取出结果集的内容。
以下方法的第一个参数,用来控制 ResultSet 的指针移动策略。
Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException;
ResultSet 内部设置了3个常量值,来控制指针移动的策略:
int TYPE_FORWARD_ONLY = 1003;
int TYPE_SCROLL_INSENSITIVE = 1004;
int TYPE_SCROLL_SENSITIVE = 1005;
ResultSet 提供了以下8个接口,来支持它可滚动的特性:
// 向后滚动 boolean next() throws SQLException; // 向前滚动 boolean previous() throws SQLException; // 移动到相对当前行的第几行 boolean relative( int rows ) throws SQLException; // 移动到整个 ResultSet 中的第几行 boolean absolute( int row ) throws SQLException; // 移动到第一行 boolean first() throws SQLException; // 移动到最后一行 boolean last() throws SQLException; // 移动到第一行的前一行(没有数据) void beforeFirst() throws SQLException; // 移动到最后一行的后一行(没有数据) void afterLast() throws SQLException;
2. 可更新
以下方法的第二个参数,用来控制 ResultSet 的并发类型:
Statement createStatement(int resultSetType, int resultSetConcurrency) throws SQLException;
这个参数可以接收以下2个值:
int CONCUR_READ_ONLY = 1007;
int CONCUR_UPDATABLE = 1008;
一旦将并发模式设置成 CONCUR_UPDATABLE,那么 JDBC API 就提供了一系列的 updateXxx(int columnIndex, Xxx value) 方法去更新 ResultSet 的数据。
这些数据的 UPDATE,会直接反应到数据库中。
3. Demo
最后贴一下 ResultSet 的示例代码:
package com.gerrard.demo;
import com.gerrard.entity.Student;
import com.gerrard.util.Connector;
import com.gerrard.util.DriverLoader;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public final class ResultSetDemo {
public static void main(String[] args) {
String sql = "SELECT * from STUDENT";
DriverLoader.loadSqliteDriver();
try (Connection conn = Connector.getSqlConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql)) {
dealResultSet(rs);
} catch (SQLException e) {
e.printStackTrace();
}
}
private static void dealResultSet(ResultSet rs) throws SQLException {
while (rs.next()) {
int id = rs.getInt(1);
String name = rs.getString(2);
String password = rs.getString(3);
Student student = new Student(id, name, password);
System.out.println(student);
}
}
}
输出结果:

原文:https://www.cnblogs.com/jing-an-feng-shao/p/9227085.html