SQLServerでのS2Pager動作確認
Microsoftが提供しているJDBCドライバが結構不安なSQLServerでS2Pagerを使ってみたら、やっぱり動かなかった……。
具体的に言うと、レコードの件数が必ず0件になってしまいます。
検証した結果、SQLServerのドライバでwhile(resultSet.next())などの構文を使ってResultSetを最後までループさせてしまうと、ResultSet#getRow()が必ず0を返してしまうというバグが原因でした。
結局PagerResultSetWrapper#next()メソッドを以下のように変更して動作を確認。コメントしているのが変更点。
public boolean next() throws SQLException { boolean next = super.next(); if ((condition.getLimit() == PagerCondition.NONE_LIMIT || counter < condition.getLimit()) && next) { counter += 1; return true; /*削除 } else { boolean cursor = ResultSetUtil.autoLast(original); System.out.println("cursor=" + cursor); int count = original.getRow(); if (!cursor) { count = original.getRow() - 1; } count = count <= 0 ? 0 : count; */ //追記ここから } else if (next) { counter += 1; while(original.next()){ counter += 1; } } //追記ここまで condition.setCount(counter + condition.getOffset()); return false; }
ドライバのバグのせいだし、本家で対応しなくてもいいと思いますが、お見知りおきを>id:agtさま。
あと、S2Pagerのサンプルアプリケーションで検索条件を入れられるようになってますが、一度何か選択して、その後ブランクに戻して検索しなおすと、前の検索条件で検索されてしまう、という不具合があるようです。