- PR -

jspのページで検索する際

1
投稿者投稿内容
未記入
常連さん
会議室デビュー日: 2005/06/03
投稿数: 22
投稿日時: 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>


---------------------------------------------------------
ぬべたそ
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 72
投稿日時: 2005-06-07 13:29
[quote]
未記入さんの書き込み (2005-06-07 13:05) より:
これを10件や20件ずつと件数を指定して表示させるようにするには
どうしたらよいでしょうか?さらにフォームでボタンを設置して
『次のページ』や『前にページ』と言う風に、
クリックするだけで10件だけ表示されたページが移動するように
したいのですどなたかアドバイスをお願いします。

------------------------------------------
データベースから検索結果を取得する時点で、〇件目〜〇件目を取得すると指定することができます。

ページの切替機能は多少複雑になりますね。

色々実装方法はありますが、URLのパラメータに何件目から取得するかを表す属性を持たせ、
その値で上記の検索方法で検索すればよいのではないでしょうか。
JSP中にデータベースアクセスするコードを書いているようですが、このままだとページ切替機能の実装は大変かもしれません。

未記入
常連さん
会議室デビュー日: 2005/06/03
投稿数: 22
投稿日時: 2005-06-07 13:56
mysqlを検索する際に使う条件句を使うのはわかりました。
select * from shop where name like '% java %' order by id limit 0.5;

String sql = のところに記述すればいいのですよね。

>>URLのパラメータに何件目から取得するかを表す属性を持たせ
ここのやり方が全くわかりません(泣


ぬべたそ
ベテラン
会議室デビュー日: 2003/12/18
投稿数: 72
投稿日時: 2005-06-07 14:24
引用:

>>URLのパラメータに何件目から取得するかを表す属性を持たせ
ここのやり方が全くわかりません(泣


例えば、Googleで'mysql'をキーワードに検索してみてください。
たくさんヒットすると思います。
そこで、1ページだけでは表示しきれないので、次のページを表示すると
ブラウザのURL欄に、start=10とか表示されませんか?

このようにして、表示させたい最初のインデックスをパラメータに渡し、
SQLを動的に組み立てれば(10件目から20件目を取得するように等)良いのではないでしょうか。
1

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