JDBC - 将光标移出insertRow

时间:2016-07-26 17:23:08

标签: java jdbc

我在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()时如何将光标移回初始位置?

2 个答案:

答案 0 :(得分:0)

您应该使您的语句可滚动,如下所示

Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

答案 1 :(得分:0)

完成插入后,您需要使用moveToCurrentRow()离开插入行以返回到您所在的行,完成后(假设您实际上有可滚动的游标),您可以调用{ {1}}。

请注意 - 根据驱动程序实现 - 完全有可能通过结果集插入的行对当前结果集不可见。