質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

2回答

2688閲覧

JSPでSQLのselect文whereで複数指定

kitten

総合スコア25

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2019/03/15 06:30

編集2019/03/15 06:35

前提・実現したいこと

下記のコードの中央辺りに
String sql = "SELECT * from search_gaityu WHERE stock ILIKE ?";
とあると思うのですが
以前作った検索システムでは一つのKEYで検索出来ればよかったのですが
今回はcustomer,pname,parts,parts2,stockの5つをKEYに検索したいのですが
どれだけ調べても解決できる方法が見つかりませんでした。
ご教授宜しくお願い致します。

完成イメージ

例えばここに

取引先    製品名    部品名 部品名2 部品コード 仕入値 備考
神澤工業所 RB441T(CE) ツメベース    RB12625 5.00

という1行があったときにHTMLの検索フォームから
神澤工業所と入力してもRB441T(CE)と入力しても
何れの値で検索をかけても上記の様に表示されるようにしたいと思っています。

該当のソースコード

JSP

1<%@page import="java.util.*"%> 2<%@page import="java.sql.*"%> 3 4<%@ page language="java" contentType="text/html; charset=UTF-8" 5 pageEncoding="UTF-8"%> 6<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 7<html> 8<head> 9<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 10 11<title>PostgreSQL server connection test</title> 12</head> 13<body> 14 15 16<% 17 //変数定義 18 Connection conn = null; 19 PreparedStatement ps = null; 20 ResultSet rs = null; 21 22 try { 23 24 String dbURL = "jdbc:postgresql://localhost:5432/testdb"; 25 String user = "postgres"; 26 String pass = "takahashi"; 27 String key = "%"; 28 29 if(request.getParameter("key") != null) { 30 if(request.getParameter("key") != "") { 31 key = request.getParameter("key") + "%"; 32 } 33 } 34 35 System.out.println("*** key = " + key); 36 37 conn = DriverManager.getConnection(dbURL, user, pass); 38 39 40 String sql = "SELECT * from search_gaityu WHERE stock ILIKE ?"; 41 42 ps = conn.prepareStatement(sql); 43 key = key.replace("*", "%"); 44 ps.setString(1, key); 45 46 47 48 //SELECTを実行する 49 rs = ps.executeQuery(); 50 51 //取得した結果を全件出力する 52 //out.println("<div class="table-scroll">"); 53 out.println("<table>"); 54 out.println("<tr><th>取引先</th><th>製品名</th><th>部品名</th><th>部品名2</th><th>部品コード</th><th>仕入値</th><th>仕入値2</th</tr>"); 55 while(rs.next()){ 56 out.println("<tr>"); 57 out.print("<td>" + rs.getString("customer") + "</td>"); 58 out.print("<td>" + rs.getString("pname") + "</td>"); 59 out.print("<td>" + rs.getString("parts") + "</td>"); 60 out.print("<td>" + rs.getString("parts2") + "</td>"); 61 out.print("<td>" + rs.getString("stock") + "</td>"); 62 out.print("<td>" + rs.getString("other") + "</td>"); 63 out.print("<td>" + rs.getString("other2") + "</td>"); 64 out.println("</tr>"); 65 } 66 out.println("</table>"); 67 //out.println("</div>"); 68 69 } catch (SQLException ex) { 70 ex.printStackTrace(); 71 } finally { 72 try { 73 if (conn != null && !conn.isClosed()) { 74 conn.close(); 75 } 76 } catch (SQLException ex) { 77 ex.printStackTrace(); 78 } 79 } 80%> 81</body> 82</html> 83

補足情報(FW/ツールのバージョンなど)

必要ではないかとは思いますがHTMLのソースもあげておきます。

HTML

1<html> 2 <head> 3 <title>型棚検索</title> 4 5 </head> 6 <body> 7 <h1 id="heading">外注費検索</h1> 8 <div id="center-block"> 9 <form id="form" action="/Gaityu/jsp/search_gaityu.jsp" method="post" name="form" onSubmit="return check()"> 10 <input id="sbox" type="text" name="key" placeholder="検索ワードを入力して下さい" onblur="toHalfWidth(this)"/><input id="sbtn" type="submit" value="検索"> 11 </form> 12 </div> 13 <script> 14 function toHalfWidth(elm) { 15 elm.value = elm.value.replace(/[A-Za-z0-9!-~]/g, function(s){ 16 return String.fromCharCode(s.charCodeAt(0)-0xFEE0); 17 }); 18 } 19 /* 20 function check(){ 21 22 var flag = 0; 23 24 if(document.form.key.value == ""){ 25 flag = 1; 26 } 27 28 if(flag){ 29 window.alert('部品コードを入力して下さい'); 30 return false; // 送信を中止 31 } 32 else{ 33 return true; // 送信を実行 34 } 35 }*/ 36 </script> 37 </body> 38</html> 39 40 41

ちなみにですが、テーブルの空欄には実際はNULLという値を入れております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

customer,pname,parts,parts2,stockの5つをKEYに検索したい
何れの値で検索をかけても上記の様に表示されるようにしたい

なので、

sql

1SELECT * from search_gaityu WHERE stock ILIKE ? or customer ILIKE ? or pname ILIKE ? or parts ILIKE ? or parts2 ILIKE ?

とした上で、

java

1ps = conn.prepareStatement(sql); 2key = key.replace("*", "%"); 3ps.setString(1, key); 4ps.setString(2, key); 5ps.setString(3, key); 6ps.setString(4, key); 7ps.setString(5, key);

とすれば良いのではないでしょうか。

投稿2019/03/15 08:06

A-pZ

総合スコア12011

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ps.setString(1, key);の1はインデックスです。
複数条件で検索したいのであれば、

SQL

1WHERE A = ? AND B = ? AND C = ?

と記述して、

JAVA

1ps.setString(1, key); 2ps.setString(2, hoge); 3ps.setString(3, fuga);

としてやればいいはずです。

投稿2019/03/15 06:48

kariya

総合スコア75

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kitten

2019/03/15 07:06

間違った解釈をしていれば申し訳ないのですが JSPページには遷移しましたが、何も表示されない現象が今度は起きました。 因みに私がkariya様から教えていただいたコードを見たうえで変えた点が ps.setString(1, key); ps.setString(2, key); ps.setString(3, key); ps.setString(4, key); ps.setString(5, key); と String sql = "SELECT * from search_gaityu WHERE stock ILIKE ? or customer ILIKE ? or pname ILIKE ? or parts ILIKE ? or parts2 ILIKE ? or stock ILIKE ?"; になります。 恐らくkariya様が仰っている事と違うことをしているため 上手くいかなかったのだと思いますので間違っている点を わかりやすくご指摘願います。
kariya

2019/03/15 08:17

ごめんなさい、コメント見逃してました。 SQLの文中に?が6個あるのがおかしいんじゃないでしょうか?
kitten

2019/03/19 04:35

すみません。stockが2つ入力されていたため?が1つ余分でした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問