我在ResultSet中插入了多行,如下所示,我需要在插入所有行后打印出ResultSet,所以尝试将光标移回第一行之前,并在那里失败并出现错误 - “ line:Java.lang.IllegalStateException:当光标位于插入行上时,无法调用此方法“
ResultSet rs = ...;
for(int i=0; i<5; i++){
rs.moveToInsertRow();
rs.updateString("NAME", "Jon");
rs.updateString("ADDRESS", "111 New York");
rs.updateString("EMAIL", "test@test.com");
}
rs.beforeFirst(); // Error at this line: Java.lang.IllegalStateException: This method cannot be called when the cursor is on the insert row
//ResultSet print logic goes here
if( rs.getType() == ResultSet.TYPE_FORWARD_ONLY){
ResultSetMetaData rsmd = rs.getMetaData();
int columnsNumber = rsmd.getColumnCount();
while (rs.next()) {
for (int i = 1; i <= columnsNumber; i++) {
String columnValue = rs.getString(i);
sb.append(rsmd.getColumnName(i)).append(" : ").append(columnValue).append(" ");
}
}
}
任何想法,当调用moveToInsertRow()时如何将光标移回初始位置?
答案 0 :(得分:0)
您应该使您的语句可滚动,如下所示
Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
答案 1 :(得分:0)
完成插入后,您需要使用moveToCurrentRow()
离开插入行以返回到您所在的行,完成后(假设您实际上有可滚动的游标),您可以调用{ {1}}。
请注意 - 根据驱动程序实现 - 完全有可能通过结果集插入的行对当前结果集不可见。