absolute(int row)
Java Docは次のように述べています。
この ResultSet オブジェクト内の指定された行番号にカーソルを移動します。行番号が正の場合、カーソルは結果セットの先頭から指定された行番号に移動します。最初の行は行 1、2 番目の行は行 2 などです。
指定された行番号が負の場合、カーソルは結果セットの最後を基準とした絶対行位置に移動します。たとえば、absolute(-1) メソッドを呼び出すと、カーソルが最後の行に配置されます。メソッド absolute(-2) を呼び出すと、カーソルが最後から 2 番目の行に移動します。
指定された行番号がゼロの場合、カーソルは最初の行の前に移動します。
結果セットの最初/最後の行を超えてカーソルを配置しようとすると、カーソルは最初の行の前または最後の行の後に残ります。
注: absolute(1) の呼び出しは、first() の呼び出しと同じです。absolute(-1) の呼び出しは、last() の呼び出しと同じです。
0
メソッドに渡すときは、最初の行の直前にカーソルabsolute(int row)
を配置するように動作する必要があります。beforeFirst()
しかし、Jaybird を使用すると、次の例外があります。
Exception in thread "main" org.firebirdsql.jdbc.FBSQLException: You cannot position to the row 0 with absolute() method.
at org.firebirdsql.jdbc.FBCachedFetcher.absolute(FBCachedFetcher.java:243)
at org.firebirdsql.jdbc.FBCachedFetcher.absolute(FBCachedFetcher.java:232)
at org.firebirdsql.jdbc.AbstractResultSet.absolute(AbstractResultSet.java:1371)
at chapterA.ResultSets.main(ResultSets.java:180)
Jaybird のソース(FBCachedFetcher.java)
を検索すると、行パラメーターが 0 の場合に例外がスローされることがわかりました。
private boolean absolute(int row, boolean internal) throws SQLException {
checkScrollable();
if (row < 0) {
row = rows.size() + row + 1;
}
if (row == 0 && !internal) {
throw new SQLException("You cannot position to row 0 with absolute() method.");
}
そのように振る舞う理由はありますか?
前もって感謝します!