2017-08-04 63 views
0

絕對調用()根據我的研究OCP書下面不拋出異常:上未設置爲TYPE_SCROLL_SENSITIVE一個結果或不敏感

try(Connection conn = DriverManager.getConnection("jdbc:derby:zoo"); 
    Statement stmt = conn.createStatement(); 
ResultSet rs = stmt.executeQuery(sql)){ 

rs.absolute(0); 
rs.next(); 
System.out.println(rs.getString(1)); 
} 

正如你可以看到conn.createStatement()doesen」 t有像ResultSet.TYPE_SCROLL_INSENSITIVE這樣的任何參數所以結果集應該只能一次向前移動一行嗎?然而他們說沒有例外。那麼這是OCP書中的一個錯誤還是我在這裏錯過了一些東西?

問候

+1

您是否檢查過生成的實際結果集類型?如果方便,驅動程序可以'升級'結果集類型。此外,某些驅動程序實現是寬鬆的,允許超出JDBC要求的範圍,例如,只要行索引是當前或更高,某些驅動程序允許您將絕對值用於僅前向結果集。您還應該指定使用哪個數據庫和哪個驅動程序+版本。 –

回答

0

Oracle documentation能給你爲什麼這不會產生任何異常的更多細節。根據文檔,這些參數的默認值是'type'和'concurrency'。

聲明的createStatement()拋出的SQLException

創建SQL語句發送到數據庫的Statement對象。不帶參數的SQL語句通常使用Statement對象執行。如果多次執行相同的SQL語句,則使用PreparedStatement對象可能會更有效。

使用返回的Statement對象創建的結果集默認爲TYPE_FORWARD_ONLY,並且其併發級別爲CONCUR_READ_ONLY。創建結果集的可保存性可以通過調用getHoldability()來確定。

返回:

一個新的默認Statement對象

拋出:SQLException - 如果發生數據庫訪問錯誤,或者調用此方法在關閉的連接

正如@MarkRotteveel已經提到在他的評論中,

此外,一些驅動程序的實現是寬鬆的,並允許mo再不是由JDBC要求,如一些驅動程序允許您使用絕對有隻向前結果集,只要行索引是當前或更高

希望這回答您的問題!