在执行JDBC调用时,我使用的是默认的ResultSet。我感到惊讶的是,在使用next()迭代ResultSet之后,我可以调用first()返回到第一行。这并不意味着仅使用前向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>发布于 2018-07-21 13:50:24
MySQL连接器/J的默认行为是在调用ResultSet时立即将.executeQuery的全部内容加载到内存中。因此,即使我们的ResultSet是TYPE_FORWARD_ONLY,MySQL JDBC开发人员显然决定“很好”,允许我们在这种情况下使用.first、.absolute等(因为整个ResultSet都在内存中并且随时可用),尽管JDBC规范说。
对于类型为
ResultSet的TYPE_FORWARD_ONLY对象,唯一有效的游标移动方法是next。所有其他游标移动方法都抛出一个SQLException。
但是,请注意,如果整个ResultSet不能保证在内存中,例如,如果我们在滚动ResultSet时使用st.setFetchSize(Integer.MIN_VALUE)“流”ResultSet,那么MySQL连接器/J将不允许我们使用除了.next以外的任何东西,否则我们将得到
com.mysql.jdbc.OperationNotSupportedException: Operation not supported for streaming result setshttps://stackoverflow.com/questions/51451130
复制相似问题