2016-07-26 58 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()

請注意,根據驅動程序的實現,完全有可能通過結果集插入的行對當前結果集不可見。