我在這裏有點茫然。我應該爲特定目的編寫一個javax.sql.RowSet
的實現,我正在儘可能地對它進行單元測試。插入行上的遊標會在ResultSet#next中發生什麼?
現在,ResultSet
的遊標可以位於普通行上(或在第一行之後或最後一行之前)或插入行中。 moveToInsertRow()
說:
只有更新,吸氣,當光標位於插入行insertRow方法可以被調用。
什麼是應該發生什麼,然後說。 next()
沒有什麼幫助甚至沒有指出這種情況:
移動光標froward(sic!)一行從它的當前位置。 A光標最初位於第一行之前;下一個方法的第一個調用使第一行成爲當前行;第二次調用使第二行成爲當前行,依此類推。
當對下一個方法的調用返回
false
時,光標位於最後一行之後。任何需要當前行的ResultSet
方法的調用都會導致拋出SQLException
。如果結果集類型爲TYPE_FORWARD_ONLY
,則供應商指定其JDBC驅動程序實現是否將返回false
或在隨後調用next
時拋出SQLException
。如果輸入流對當前行打開,則調用方法
next
將隱式關閉它。 AResultSet
讀取新行時清除對象的警告鏈。返回:
true
如果新的當前行是有效的;false
如果沒有更多的行拋出:
SQLException
- 如果發生數據庫訪問錯誤,或者該方法被調用關閉的結果集
我與JDBC API的沒有任何經驗因此不知道這是否是故意不明確的(未定義的行爲可能?)或僅僅是疏忽。
目前我覺得我只是拋出一個SQLException
儘管這一直無處規定,因此也許UnsupportedOperationException
會更好(如SQLException
預示着DB錯誤或關閉ResultSet
- 這兩者都不是這裏的情況)。
還是我在某處錯過了一些文檔?
自我相同的文件使我的頭腦旋轉。假設你加載100行。 1)如果你在結果集上調用next(),他們在說什麼'輸入流'時說什麼? 2)你可以在同一個ResultSet上再次調用absolute(-1)而不會發生SQLException嗎? 3)這個「警告鏈」是什麼? – JGFMK 2011-02-21 06:52:26
@JGFMK:1.輸入流是一個`InputStream`對象,其中一個`update * Stream`方法被傳入,它仍然可以打開。 2.`絕對(-1)`聽起來很奇怪,現在我沒有文檔,但我認爲這應該是一個錯誤,因爲沒有「減第一」行。 3.警告鏈收集數據庫在調用各種方法時遇到的警告。它在我的實現中未被使用(因爲CSV文件不會創建警告),所以我不在乎太多。你應該能夠最終弄清楚,但是`RowSet`的200多種方法並不容易。 – Joey 2011-02-21 08:19:36