- PR -

jspとmysqlの連結

1
投稿者投稿内容
未記入
常連さん
会議室デビュー日: 2005/06/03
投稿数: 22
投稿日時: 2005-06-03 22:35
jspとmysqlの連動したページを作っているのですが
select count(*) from テーブル名;を使い
件数を表示(XX件表示など)させたいのです
さらに値段からXX円以上からXX円以下なども
データから検索し表示させたいのですが

String sql = "select * from shop where name like '%" + keyword + "%' or author like '%" + keyword + "%' ;の部分をどのように記述すればよいか
解かりません.

----------------------------------------------------------------------
<%@ page contentType="text/html;charset=Windows-31J" %>
<html>
<head><title>値段の範囲指定</title></head>
<body>
<jsp:include page="header1.html" />
値段の範囲が指定できます
</body>
<form action="result7.jsp" method="post">
キーワード<input type="text" size="10" name="keyword">
値段<input type="text" size="10" name="price1">
<select name="updown">
<option value=">" selected>以上
<option value="<" >以下
</select>

<input type="submit" value="検索">
</form>
</html>
--------------------------------------------------------------------------
<%@ page contentType="text/html;charset=Windows-31J" %>
<%@ page import="java.sql.*" %>
<%
//日本語対策
request.setCharacterEncoding("JISAutoDetect");
//パラメータの取得
String keyword = request.getParameter("keyword");
int reqId = Integer.parseInt(request.getParameter("id"));

//ドライバーのロード
Class.forName("com.mysql.jdbc.Driver");
//DBに接続
String url = "jdbc:mysql://localhost/java4?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);
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<title>書籍検索2</title>
</head>
<body>
<jsp:include page="header1.html" />
「<%= keyword %>」の検索結果
「<%= ??? %>」件の検索

<table border="1" cellpadding="8">
<tr><th>ID</th><th>イメージ</th><th>書名</th><th>値段</th><th>著者</th><th>出版社</th><th>ジャンル</th><th>カテゴリー</th></tr>
<%
//結果の表示
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/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-06-04 00:40
ご質問の意図がつかみきれない(「jspとmysqlの連結」?)のですが、要はwhere句の書き方がわからないということでしょうか?
値段でxx円以上、xx円以下、という検索をしたいのであれば between を使えば良いかと思います。

あと、質問の内容からははずれますがキーワードを + でつなげて SQL を構成するのは危険ですよ。ご注意ください。
http://www.atmarkit.co.jp/fsecurity/rensai/webhole02/webhole01.html
未記入
常連さん
会議室デビュー日: 2005/06/03
投稿数: 22
投稿日時: 2005-06-04 01:01
書き方が悪くてすみません(泣

今tomcatとjspとmysqlを使い動的なホームページを作る練習をしていて
いるのですが、上のコードを使いページからmysqlに登録したデータを
キーワードを入力することによって検索したりできるようにしていて
います。

悩んでいるのが、登録したデータからのキーワード検索とか値段の高いものから
順に並べたりは自力でできたんですが。フォームのselect文を使い
(例:2000以上とか以下)の(以上、以下)を選択肢に作り、
値段<input type="text" size="10" name="price1">
に値段を入力し以上、以下を選択することによってその検索結果が表示
できるようにしたいんです。

betweenも使い色々入力して見たのですがうまくできません(泣
ykhr
会議室デビュー日: 2004/11/12
投稿数: 18
投稿日時: 2005-06-04 12:29
nameかauthorにkeywordを含んでいて、price1以上(または以下)である
データを検索したいということでしょうか?

MySQLは使ったことないんですが、where句をこんな感じにすればいけませんかね?
where (A or B) and C
A:nameのlike検索
B:authorのlike検索
C:値段の条件

SQLがわからないというのでしたら、プログラムからでなく
コンソールなどから試した方がいいと思いますよ。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-06-04 12:39
・〜以上、を検索する SQL 、〜以下を検索する SQL はどういう風に表現するか
・チェックボックスの選択状況に応じて条件分岐をするにはどうしたらよいか
と2つの要素があると思います。2つ同時に実現使用とすると混乱するかもしれませんから一つ一つクリアしていきましょう。
未記入
常連さん
会議室デビュー日: 2005/06/03
投稿数: 22
投稿日時: 2005-06-04 22:18
みなさんありがとうございます!!
もうひとつやりたいことがあって
int count = 0;
while(rs.next()) {
count++;
}
を使いキーワード検索しデータベースにあるデータと一致した件数を
取得し件数を表示させるようやっているのですが、

Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
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++;
}
%>

<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 %>」件見つかりました
(以下省略)

と入力すると件数は取得できたんですが
//結果の表示
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>

の部分が表示されなくなってしまいました。
色々試しているんですがデータを一件だけ表示したり
なかなかうまく行きません。。すみませんがどうしたらよいでしょうか?

未記入
常連さん
会議室デビュー日: 2005/06/03
投稿数: 22
投稿日時: 2005-06-04 22:56
最初の質問は解決できました!!
みなさん本当にありがとうございます。

select文を
値段<input type="text" size="10" name="price1">
<select name="updown">
<option value=">" selected>以上
<option value="<" >以下
と記述して

//パラメータの取得
String keyword = request.getParameter("keyword");
int price1 = Integer.parseInt(request.getParameter("price1"));
String updown = request.getParameter("updown");
として

String sql = "select * from shop where name like '%"+ keyword +"%' and price " + updown + "" + price1;

と記述したらできました。 みなさんありがとうございました☆
1

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