こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

jspとsqlの連結したページ

<%@ page import="java.sql.*" %>
<%
//パラメータの取得
String keyword = request.getParameter("keyword");
//ドライバーのロード
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);%>

jspとmysqlの連動したページを作っているのですが
select count(*) from テーブル名;を使い
件数を表示(XX件目など)させたいのです
さらに値段からXX円以上からXX円以下なども
データから検索し表示させたいのですが

String sql = "select * from shop where name like '%" + keyword + "%' or author like '%" + keyword + "%' ;の部分をどのように記述すればよいか
解かりません! どなたかお願いします☆()

投稿日時 - 2005-06-03 21:02:03

QNo.1427367

すぐに回答ほしいです

質問者が選んだベストアンサー

取得したデータ数を知りたいのですよね?

http://www.gimlay.org/~javafaq/S135.html

こちらの「java.sql.ResultSetで取得したデータの数を得たいのですが?」で
3通りの方法が紹介されています。

参考URL:http://www.gimlay.org/~javafaq/S135.html

投稿日時 - 2005-06-04 01:24:22

補足

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("select * from shop where name like '%" + keyword + "%' or author like '%" + keyword + "%'");
rs.next();
// 行数を取得する。
int count = rs.getInt(1);

としたのですが
java.lang.NumberFormatException: null
と言ったエラーが出ます(泣
朝まで粘ってたんですが。力尽きそうです(泣

投稿日時 - 2005-06-04 05:08:55

ANo.2

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

beforeFirstでResultSetのカーソルを元に戻さないとダメです。

参考URL:http://java.sun.com/j2se/1.4/ja/docs/ja/api/java/sql/ResultSet.html

投稿日時 - 2005-06-05 15:26:42

お礼

sakuhatさんありがとうございます!!
できました☆
こんな便利なメソッドがあったとは。。
全く違う方法でやろうとしてました(泣

本当に感謝しています!
ありがとうございました。

投稿日時 - 2005-06-05 18:25:12

ANo.3

2番目の方法を使っているようですが
2番目はSQL文でCOUNTを使わなければなりませんし、
この方法は行数だけしか取得できません。

while文使って数えるか、last()で最終行まで行ってgetRow()で
現在何行目か取得する方法でいけると思います。

投稿日時 - 2005-06-04 14:38:09

補足

できました!!昨日あれだけできなかったのに(笑
ただ、、ひとつだけ問題があるのですwhile(rs.next()) を使うと下に表が表示されないのです。
rsと言う変数を下の表が読み取っていないみたいです
どうしたらよいでしょうか? 何度もすみません
自分でも色々試して見ます。

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 %>」件見つかりました
<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>

投稿日時 - 2005-06-04 21:06:55

ANo.1

まずjspとsqlがごっちゃになっているようですね。今回の質問はsqlの質問ですのでjsp云々は関係ありません。mysqlはsqlという文法で書かれた命令を実行します。このsqlをjspで作成しているに過ぎないので、まずは必要なsqlを考えて、それを生成するコードをjspで書く、という流れになります。ここを別けて考えないと後々混乱しますよ。ちなみにjspはわからないのでsqlに関する事だけ。

まず値段に関してですが、low以上high以下をsqlで表現すると'値段フィールド between low and high'になります。これをwhere句に追加して下さい。

件数表示ですが、これはこのsqlを実行した後、マッチしたデータの件数を知りたいという事ですか?これはもしかしたらjspに「直前に実行したsqlの行数を得る」という関数があるんじゃないかな。調べてみて下さい。

投稿日時 - 2005-06-03 23:57:21

補足

文字数の関係で書けなかったのですが
MYSQLにデータは登録してあります。

drop table if exists shop;
create table shop (
id   int auto_increment primary key,
image varchar(40),
namevarchar(130),
priceint,
authorvarchar(30),
publish  varchar(30),
genrevarchar(30),
kindvarchar(30)
);
insert into shop values(null,'~~~.jpg','タイトル~~,2520,'著者~~ ','出版社~~','~~','~~' );と30個くらいデータを入れて、TOMCATを起動してjspファイルを表示させてキーワードを入力して検索ボタンを押すとデータから検索したりできるところまでは完成しています。

投稿日時 - 2005-06-04 00:02:34

あなたにオススメの質問