- ベストアンサー
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の連動したページを作成しています。お使いのJSPファイルでは、指定されたキーワードで商品の名前や著者を検索し、それに一致する商品を表示しています。さらに、価格範囲を指定してデータを検索し、表示することもできます。しかし、"select * from shop where name like '%" + keyword + "%' or author like '%" + keyword + "%' ;"の部分のSQL文をどのように記述すれば良いかわかりません。
- JSPとSQLを連結して、指定されたキーワードで商品を検索し表示するページを作成しています。さらに、価格範囲を指定してデータを検索する機能も追加しています。しかし、SQL文の一部を記述することができません。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
取得したデータ数を知りたいのですよね? http://www.gimlay.org/~javafaq/S135.html こちらの「java.sql.ResultSetで取得したデータの数を得たいのですが?」で 3通りの方法が紹介されています。
その他の回答 (3)
- sakuhat
- ベストアンサー率61% (11/18)
beforeFirstでResultSetのカーソルを元に戻さないとダメです。
お礼
sakuhatさんありがとうございます!! できました☆ こんな便利なメソッドがあったとは。。 全く違う方法でやろうとしてました(泣 本当に感謝しています! ありがとうございました。
- sakuhat
- ベストアンサー率61% (11/18)
2番目の方法を使っているようですが 2番目はSQL文でCOUNTを使わなければなりませんし、 この方法は行数だけしか取得できません。 while文使って数えるか、last()で最終行まで行ってgetRow()で 現在何行目か取得する方法でいけると思います。
補足
できました!!昨日あれだけできなかったのに(笑 ただ、、ひとつだけ問題があるのです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>
- wakame0729
- ベストアンサー率32% (245/765)
まずjspとsqlがごっちゃになっているようですね。今回の質問はsqlの質問ですのでjsp云々は関係ありません。mysqlはsqlという文法で書かれた命令を実行します。このsqlをjspで作成しているに過ぎないので、まずは必要なsqlを考えて、それを生成するコードをjspで書く、という流れになります。ここを別けて考えないと後々混乱しますよ。ちなみにjspはわからないのでsqlに関する事だけ。 まず値段に関してですが、low以上high以下をsqlで表現すると'値段フィールド between low and high'になります。これをwhere句に追加して下さい。 件数表示ですが、これはこのsqlを実行した後、マッチしたデータの件数を知りたいという事ですか?これはもしかしたらjspに「直前に実行したsqlの行数を得る」という関数があるんじゃないかな。調べてみて下さい。
補足
文字数の関係で書けなかったのですが MYSQLにデータは登録してあります。 drop table if exists shop; create table shop ( id int auto_increment primary key, image varchar(40), name varchar(130), price int, author varchar(30), publish varchar(30), genre varchar(30), kind varchar(30) ); insert into shop values(null,'~~~.jpg','タイトル~~,2520,'著者~~ ','出版社~~','~~','~~' );と30個くらいデータを入れて、TOMCATを起動してjspファイルを表示させてキーワードを入力して検索ボタンを押すとデータから検索したりできるところまでは完成しています。
補足
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 と言ったエラーが出ます(泣 朝まで粘ってたんですが。力尽きそうです(泣