前提・実現したいこと
タイトル通りデータベースに存在しない値が入力された時(1)と
何も入力されずに検索ボタンが押された時(2)に
エラーページが表示されるようにしたい。
発生している問題・エラーメッセージ
現状としまして、結果は
(1)項目名の1行だけが表示される
(2)データベース内全てのデータが表示される
です。
該当のソースコード
HTML
1<html> 2 <head> 3 <title>型棚検索</title> 4 <link rel="stylesheet" type="text/css" href="/Katadana/css/DBTest-all.css" /> 5 </head> 6 <body> 7 <h1 id="heading">型棚検索システム</h1> 8 <div id="center-block"> 9 <form id="form" action="/Katadana/jsp/DBTest.jsp" method="post"> 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 </script> 20 </body> 21</html> 22
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<link rel="stylesheet" type="text/css" href="/Katadana/css/DBTest-jsp.css" /> 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/katadanadb"; 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 katadana WHERE pcode LIKE ?"; 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>工程</th></tr>"); 55 while(rs.next()){ 56 out.println("<tr>"); 57 out.print("<td>" + rs.getString("snum") + "</td>"); 58 out.print("<td>" + rs.getString("pcode") + "</td>"); 59 out.print("<td>" + rs.getString("pname") + "</td>"); 60 out.print("<td>" + rs.getString("process") + "</td>"); 61 out.println("</tr>"); 62 } 63 out.println("</table>"); 64 //out.println("</div>"); 65 66 } catch (SQLException ex) { 67 ex.printStackTrace(); 68 } finally { 69 try { 70 if (conn != null && !conn.isClosed()) { 71 conn.close(); 72 } 73 } catch (SQLException ex) { 74 ex.printStackTrace(); 75 } 76 } 77%> 78</body> 79</html> 80
試したこと
上記JSPの//SELECTを実行する
rs = ps.executeQuery();
のあとに
<c:if pcode="">
error message
</c:if>
のようにしてpcodeの値によって条件分岐させればよいのかと最初は
考えたのですが実行したところ何も表示されませんでした。
また調べたところ<% %>で囲むやり方があったので
そちらも試してみましたが同様の結果でした。
行き詰ってしまったのでどなたかご教授お願いいたします。