2014-08-30 49 views
2

當我調用以下行:當我調用ResultSet.refreshRow()時,爲什麼會看到NotUpdatable?

Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY); 
ResultSet resultSet = statement.executeQuery("select * from user"); 
resultSet.next(); 
resultSet.refreshRow();//exception throws here 

我看到以下異常:

com.mysql.jdbc.NotUpdatable:結果集不updatable.This結果集 必須來自那是一個聲明創建的結果集類型爲 ResultSet.CONCUR_UPDATABLE,查詢必須只選擇一個表, 可以不使用函數,並且必須從該表中選擇所有主鍵。 有關更多詳細信息,請參見JDBC 2.1 API Specification,第5.6節。此 結果集必須來自於創建結果集 設置類型ResultSet.CONCUR_UPDATABLE的語句,查詢必須只選擇一個 表,不能使用函數並且必須從 那個表中選擇所有主鍵。有關更多 的詳細信息,請參閱JDBC 2.1 API Specification,第5.6節。

我不知道這個例外,因爲如果讀refreshRow方法的javadoc我們可以發現以下幾點:

的時refreshRow方法爲應用程序明確 告訴JDBC驅動程序來重新獲取一個行(S)提供了一種方式從數據庫

因此以下方向:database --> ResultSet

我有跟隨着摹理解:

更新是可能使用以下方向:

ResultSet --> database 

因此我不明白的問題原因。

請說明。

+0

在您的語句創建過程中,您沒有使用ResultSet.CONCUR_UPDATABLE進行設置嗎? – ControlAltDel 2014-08-30 13:10:13

+0

是的。我只想從數據庫中讀取! – gstackoverflow 2014-08-30 13:10:56

+0

我想從db得到最後的更改 – gstackoverflow 2014-08-30 13:25:41

回答

0

當您使用,ResultSet.CONCUR_READ_ONLY,你得到一個例外,那

com.mysql.jdbc.NotUpdatable:結果不設置updatable.This結果集 必須來自與創建的語句結果集類型爲 ResultSet.CONCUR_UPDATABLE,查詢必須只選擇一個表, 不能使用函數,並且必須從該表中選擇所有主鍵。 參見JDBC 2.1 API規範,爲更多的細節部分5.6 \

因此,改變ResultSet.CONCUR_READ_ONLYResultSet.CONCUR_UPDATABLE,解決你的問題。正確?

現在,據我所知,你不想這樣做。我對嗎?如果是的話,那麼我想你混淆了,與結果數據庫,

  • 爲ResultSet.CONCUR_READ_ONLY,表示只讀的ResultSet,沒有數據庫,同樣
  • ResultSet.CONCUR_UPDATABLE,意味着可更新的ResultSet,而不是數據庫。

的方法,resultSet.refreshRow(),假設更新resultSet,因此它正確地需要可更新的ResultSet。我希望現在很清楚。

+0

如果我使用ResultSet.CONCUR_UPDATABLE - 異常消失!!! – gstackoverflow 2014-09-02 07:26:02

相關問題