我用的是默认值 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>
1条答案
按热度按时间jtw3ybtb1#
mysql connector/j的默认行为是加载
ResultSet
一想到.executeQuery
被称为。所以,即使我们的ResultSet
是TYPE_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
否则我们会被逮捕的