2016-07-26 59 views
1

我在ResultSet中插入了多行,如下图所示,我需要在插入所有行后打印出ResultSet,因此尝试将光标移回第一行之前,错误 - “错误在这行:Java.lang.IllegalStateException:当光标位于插入行上此方法不能被称为”JDBC - 将光标移出insertRow

ResultSet rs = ...; 
for(int i=0; i<5; i++){ 
rs.moveToInsertRow(); 
    rs.updateString("NAME", "Jon"); 
    rs.updateString("ADDRESS", "111 New York"); 
    rs.updateString("EMAIL", "[email protected]"); 
} 

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

你应该让你的声明滚动做到这一点,像下面

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

已经做插入后,您需要使用moveToCurrentRow()回到行你在哪里上离开插入行,后已经完成了(假设你实际上有一个可滚动的光标),你可以拨打beforeFirst()

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