- - PR -
jspのページで検索する際
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-06-07 13:05
『開発環境』
TOMCAT,MYSQL, mysqlに登録したデータをjspのページのテキストフィールドに キーワードを入力して検索ボタンを押すと検索結果を表示すると 全件が検索されて表示してしまいます。 これを10件や20件ずつと件数を指定して表示させるようにするには どうしたらよいでしょうか?さらにフォームでボタンを設置して 『次のページ』や『前にページ』と言う風に、 クリックするだけで10件だけ表示されたページが移動するように したいのですどなたかアドバイスをお願いします。 ------------------------------------------ <%@ page contentType="text/html;charset=Windows-31J" %> <html> <head><title>書籍検索2</title></head> <body> <jsp:include page="header1.html" /> 検索キーワードを入力してください </body> <form action="result2.jsp" method="post"> キーワード:<input type="text" size="15" name="keyword"> <input type="submit" value="検索"> </form> </html> ------------------------------------------ <%@ page import="java.sql.*" %> <% //日本語対策 request.setCharacterEncoding("JISAutoDetect"); //パラメータの取得 String keyword = request.getParameter("keyword"); String key = request.getParameter("key"); //ドライバーのロード Class.forName("com.mysql.jdbc.Driver"); //DBに接続 String url = "jdbc:mysql://localhost/java4z?useUnicode=true&characterEncoding=MS932"; String user = "root"; String pass = ""; Connection con = DriverManager.getConnection(url,user,pass); //SQL発行先ほど指定したConnection con を利用 Statement stmt = con.createStatement(); String sql = "select * from shop where name like '%" + keyword + "%' or author like '%" + keyword + "%'"; ResultSet rs = stmt.executeQuery(sql); int count = 0; while(rs.next()) { count++; } rs.beforeFirst(); %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>書籍検索2</title> </head> <body> <jsp:include page="header1.html" /> 「<%= keyword %>」の検索結果 <%= count %>件見つかりました。 <table border="1" cellpadding="8"> <tr><th>ID</th><th>イメージ</th><th>書名</th><th>値段</th><th>著者</th><th>出版社</th><th>ジャンル</th><th>カテゴリー</th></tr> <% out.println(key); %> <% //結果の表示 while(rs.next()){ //列名を指定してResultSetから値を取得する int id = rs.getInt("id"); String image = rs.getString("image"); String name = rs.getString("name"); int price = rs.getInt("price"); String author = rs.getString("author"); String publish = rs.getString("publish"); String genre = rs.getString("genre"); String kind = rs.getString("kind"); %> <tr> <td><%= id %></td> <td><img src="img/<%= image %>"</td> <td><%= name %></td> <td><%= price %></td> <td><%= author %></td> <td><%= publish %></td> <td><%= genre %></td> <td><%= kind %></td> </tr> <% } con.close(); %> </table> </body> </html> --------------------------------------------------------- | ||||
|
投稿日時: 2005-06-07 13:29
[quote]
未記入さんの書き込み (2005-06-07 13:05) より: これを10件や20件ずつと件数を指定して表示させるようにするには どうしたらよいでしょうか?さらにフォームでボタンを設置して 『次のページ』や『前にページ』と言う風に、 クリックするだけで10件だけ表示されたページが移動するように したいのですどなたかアドバイスをお願いします。 ------------------------------------------ データベースから検索結果を取得する時点で、〇件目〜〇件目を取得すると指定することができます。 ページの切替機能は多少複雑になりますね。 色々実装方法はありますが、URLのパラメータに何件目から取得するかを表す属性を持たせ、 その値で上記の検索方法で検索すればよいのではないでしょうか。 JSP中にデータベースアクセスするコードを書いているようですが、このままだとページ切替機能の実装は大変かもしれません。 | ||||
|
投稿日時: 2005-06-07 13:56
mysqlを検索する際に使う条件句を使うのはわかりました。
select * from shop where name like '% java %' order by id limit 0.5; を String sql = のところに記述すればいいのですよね。 >>URLのパラメータに何件目から取得するかを表す属性を持たせ ここのやり方が全くわかりません(泣 | ||||
|
投稿日時: 2005-06-07 14:24
例えば、Googleで'mysql'をキーワードに検索してみてください。 たくさんヒットすると思います。 そこで、1ページだけでは表示しきれないので、次のページを表示すると ブラウザのURL欄に、start=10とか表示されませんか? このようにして、表示させたい最初のインデックスをパラメータに渡し、 SQLを動的に組み立てれば(10件目から20件目を取得するように等)良いのではないでしょうか。 |
1