- PR -

サーブレットでページング処理

投稿者投稿内容
りょうちん
ベテラン
会議室デビュー日: 2002/09/11
投稿数: 58
投稿日時: 2002-09-19 09:30
サーブレットでDBに接続してJSPて表示するのですが、
良くある、10件表示したら、「次の10件」「前の10件」みたいなボタンで
出力を制御したいのです。
あっっちこっちHPみたのですが、あまり無くよくわかりません。
どなたか、教えていただけませんか。
宜しくお願いします。
未記入
ぬし
会議室デビュー日: 2002/03/28
投稿数: 255
投稿日時: 2002-09-19 10:08
>良くある、10件表示したら、「次の10件」「前の10件」みたいなボタンで
>出力を制御したいのです。
ボタンからの入力がリクエストとしてサーバーに送られるので,
あとはそれにあわせてServletなりJSPなりでページを
生成するだけだとおもいますが?
#別にボタンが出力を制御するわけじゃない.

りょうちん
ベテラン
会議室デビュー日: 2002/09/11
投稿数: 58
投稿日時: 2002-09-19 10:27
引用:

悪夢を統べるものさんの書き込み (2002-09-19 10:08) より:
>良くある、10件表示したら、「次の10件」「前の10件」みたいなボタンで
>出力を制御したいのです。
ボタンからの入力がリクエストとしてサーバーに送られるので,
あとはそれにあわせてServletなりJSPなりでページを
生成するだけだとおもいますが?
#別にボタンが出力を制御するわけじゃない.





ありがとうございます。
ボタンが出力制御しない事はわかったのですが、
具体的にどのように書けばいいのかが解らないのです・・・
参考になるHPとかありましたら、教えていただけませんか?
わらび
ベテラン
会議室デビュー日: 2002/08/30
投稿数: 53
投稿日時: 2002-09-19 11:22
こんにちは。わらびです。

>具体的にどのように書けばいいのかが解らないのです・・・
>参考になるHPとかありましたら、教えていただけませんか?

参考となるHPは知りませんが、いろいろあると思います。
条件によっていろいろ使い分ければいいと思いますが,

1 SQLで制御する。
   最初にDBの主キーだけ取ってきて,Iteratorなりに残しておいて,
   表示件数に合わせて、WHERE句に入れる。

   SELECT * FROM DB
WHERE ID=1 OR ID=2 OR ID=3 OR ... OR ID=10

   みたいなSQLをservletを作り、NEXTボタンが押された場合は
   11〜20が入るようにする

2 DBの全フィールドを持ってきて,そのデータを持ったオブジェクトを
  Iterator等に入れて,出力する。

とりあえず、私が思いついたのはこんな感じですが,工夫次第で,いくらでも
ロジックが組めると思います。
りょうちん
ベテラン
会議室デビュー日: 2002/09/11
投稿数: 58
投稿日時: 2002-09-19 13:07
わらびさん>
ありがとうございます。
先日もありがとうございました。
先日の件はできました。

そこで先日のPGにこのページング処理を追加しようと考えていたのです。
*********************************
1 SQLで制御する。
   最初にDBの主キーだけ取ってきて,Iteratorなりに残しておいて,
   表示件数に合わせて、WHERE句に入れる。

   SELECT * FROM DB
WHERE ID=1 OR ID=2 OR ID=3 OR ... OR ID=10

**********************************
この部分はまず「所属」というものがあるんですけど、
それをキーにしてヒットするものをまず全部とってきますよ。
そして、10件なら10件をwhere句でまわすというう事なんですか?

宜しくお願いします。
わらび
ベテラン
会議室デビュー日: 2002/08/30
投稿数: 53
投稿日時: 2002-09-19 14:26
引用:

りょうちんさんの書き込み (2002-09-19 13:07) より:
この部分はまず「所属」というものがあるんですけど、
それをキーにしてヒットするものをまず全部とってきますよ。
そして、10件なら10件をwhere句でまわすというう事なんですか?



こんにちは。

たとえば、

String sql = "SELECT 所属 FROM TABLE";

connection = UtilApplication.getConnection();
statement = connection.createStatement();
resultset = statement.executeQuery(sql);

Vector key = new Vector();

while(resultset.next()){
key.add(resultset.getString(1));
}

int start = Integer.parseInt((String)request.getParameter("end")) + 1;
int end = start + 10;
request.setAttribute("end",new String(end));

StringBuffer query = new StringBuffer("SELECT * FROM TABLE WHERE ");
query.append("所属=").append(key.get(start));

for(int i = start + 1;i < end;i++){
query.append(" OR 所属=").append(key.get(i));
}

statement = connection.createStatement();
resultset = statement.executeQuery(query.toString());

こんな感じでしょうか。

即興なので,相当いいかげんですが,雰囲気だけでも。
永井和彦
ぬし
会議室デビュー日: 2002/07/03
投稿数: 276
お住まい・勤務地: 東京都
投稿日時: 2002-09-19 15:26
引用:

1 SQLで制御する。
   最初にDBの主キーだけ取ってきて,Iteratorなりに残しておいて,
   表示件数に合わせて、WHERE句に入れる。

   SELECT * FROM DB
WHERE ID=1 OR ID=2 OR ID=3 OR ... OR ID=10



私が以前ページ処理を実装したときは、SQLでデータを取得する際に
ソートをかけて、offsetとlimitを使用しました。

SQL> SELECT * FROM t_table LIMIT 10 OFFSET 20 ORDER BY hogehoge;

といった感じで、任意のキーでソートしながらデータを得ます。

[追記]
この時使用してたDBMSはPostgreSQLです。今、何気なく検索をかけたら
http://www.orangesoft.co.jp/RDB/rdb_memo_misc.html
にあるように、DBMSによって違うようですのでお気を付け下さい。

[ メッセージ編集済み 編集者: 永井和彦 編集日時 2002-09-19 15:33 ]
りょうちん
ベテラン
会議室デビュー日: 2002/09/11
投稿数: 58
投稿日時: 2002-09-19 16:35
わらびさん>
ありがとうございます。

今わらびさんのおっしゃったとうりに書いているんですが、
一つ解らない点があります。よろしいでしょうか。。
******************************

int start = Integer.parseInt((String)request.getParameter("end")) + 1
                                            ↑
******************************
「矢印」の部分の「end」がよくわりません。
これはどういうことなんですか?
宜しくおねがいします。


[ メッセージ編集済み 編集者: りょうちん 編集日時 2002-09-19 16:36 ]

[ メッセージ編集済み 編集者: りょうちん 編集日時 2002-09-19 16:36 ]

スキルアップ/キャリアアップ(JOB@IT)