java—为什么我的resultset类型为forward only时可以使用first()方法?

dm7nw8vv  于 2021-06-19  发布在  Mysql
关注(0)|答案(1)|浏览(496)

我用的是默认值 ResultSet 当我调用jdbc时。我很惊讶 next() 迭代 ResultSet ,我可以打电话 first() 回到第一排。这并不意味着只使用forward ResultSet ?
我的代码非常简单:

Statement st = conn.createStatement();
  rs = st.executeQuery(sql);

while (rs.next()) {
    for (int i = 1; i <= columnsNumber; i++) {
        if (i > 1) System.out.print(",  ");
        String columnValue = rs.getString(i);
        System.out.print(rsmd.getColumnName(i) + " : " + columnValue);
    }
    System.out.println("");
}
rs.first();

我使用的是8.0.11版本的mysql连接器

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.11</version>
</dependency>
euoag5mw

euoag5mw1#

mysql connector/j的默认行为是加载 ResultSet 一想到 .executeQuery 被称为。所以,即使我们的 ResultSetTYPE_FORWARD_ONLY mysql jdbc开发人员显然决定“友好”并允许我们使用 .first , .absolute 在这种情况下(因为 ResultSet 即使jdbc规范说
为了一个 ResultSet 类型为的对象 TYPE_FORWARD_ONLY ,唯一有效的光标移动方法是 next . 所有其他光标移动方法都会抛出 SQLException .
但是请注意,如果整个 ResultSet 不能保证在内存中,例如,如果我们使用 st.setFetchSize(Integer.MIN_VALUE) “流”出 ResultSet 当我们滚动浏览时,mysql connector/j只允许我们使用 .next 否则我们会被逮捕的

com.mysql.jdbc.OperationNotSupportedException: Operation not supported for streaming result sets

相关问题