チケット #6364

s2pagerでoffset=0の場合にOracle10gでエラー
登録: 2005-07-19 01:41 最終更新: 2006-06-01 01:45

報告者:
担当者:
チケットの種類:
状況:
完了
コンポーネント:
(未割り当て)
マイルストーン:
(未割り当て)
優先度:
5 - 中
重要度:
5 - 中
解決法:
なし
ファイル:
なし

詳細

# s2pagerの報告先は、こちらでよろしかったでしょうか?

Oracleのドライバ(10gで確認)では、ResultSet#absolute(0)
がエラーを返すため、offset=0でのpagingができません。
ResultSet#absolute(0)時には↓の例外が投げられます。

org.seasar.framework.exception.SQLRuntimeException:
[ESSR0071]SQLで例外が発生しました。理由は
java.sql.SQLException: コールに無効な引数があります。:
absolute (0)
at
org.seasar.dao.pager.PagerResultSetWrapper.moveOffset(PagerResultSetWrapper.java:114)
at
org.seasar.dao.pager.PagerResultSetWrapper.<init>(PagerResultSetWrapper.java:98)
at
org.seasar.dao.pager.PagerResultSetFactoryWrapper.createResultSet(PagerResultSetFactoryWrapper.java:93)
at
org.seasar.extension.jdbc.impl.BasicSelectHandler.createResultSet(BasicSelectHandler.java:160)
at
org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:149)
at
org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:122)
at
org.seasar.extension.jdbc.impl.BasicSelectHandler.execute(BasicSelectHandler.java:107)
at
org.seasar.dao.impl.SelectDynamicCommand.execute(SelectDynamicCommand.java:40)
at
org.seasar.dao.interceptors.S2DaoInterceptor.invoke(S2DaoInterceptor.java:38)
at
org.seasar.dao.pager.PagerS2DaoInterceptorWrapper.invoke(PagerS2DaoInterceptorWrapper.java:90)
(略)
Caused by: java.sql.SQLException: コールに無効な引
数があります。: absolute (0)
at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
at
oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162)
at
oracle.jdbc.driver.ScrollableResultSet.absolute(ScrollableResultSet.java:371)
at
org.seasar.dao.pager.PagerResultSetWrapper.moveOffset(PagerResultSetWrapper.java:111)
... 28 more

ですので、offset=0のときはResultSet#absolute(0)を実行し
ないようにしていただけますでしょうか?
私の環境では、PagerResultSetWrapper#moveOffsetを下記の
ように変更したところ、例外が出なくなりました。

private void moveOffset() {
if (useAbsolute &&
ResultSetUtil.isCursorSupport(original)) {
if (log.isDebugEnabled()) {
log.debug("[S2Pager]Use scroll cursor.");
}
if (0 < condition.getOffset()) { // ★このif
を追加
try {

original.absolute(condition.getOffset());
counter = original.getRow();
} catch (SQLException e) {
throw new SQLRuntimeException(e);
}
}
} else {
if (log.isDebugEnabled()) {
log.debug("[S2Pager]Not use scroll
cursor.");
}
try {
while (original.getRow() <
condition.getOffset()
&& original.next()) {
counter++;
}
} catch (SQLException e) {
throw new SQLRuntimeException(e);
}
}
}

よろしくお願いいたします。

チケットの履歴 (1 件中 1 件表示)

2006-06-01 01:45 更新者: manhole
  • チケット完了時刻2006-06-01 01:45 に更新されました
  • 担当者(未割り当て) から manhole に更新されました
  • 状況オープン から 完了 に更新されました
コメント
Logged In: YES
user_id=10369

1.0.31でS2PagerをS2Daoに組み込む際に、一緒に対応しました。

添付ファイルリスト

添付ファイルはありません

編集

ログインしていません。ログインしていない状態では、コメントに記載者の記録が残りません。 » ログインする