以下の2点についてお聞きしたいです。
①このエラーはどうすれば取れるでしょうか?
エラー文
org.apache.jasper.JasperException: JSPのクラスをコンパイルできません: JSPファイル: [/products.jsp] の中の[31]行目でエラーが発生しました id_product cannot be resolved 28: Class.forName("org.sqlite.JDBC"); 29: conn = DriverManager.getConnection("jdbc:sqlite:/home/sys/s216336/apache-tomcat-8.5.31/webapps/a4/shopping.db"); 30: 31: if(id_product.equals(0)){ 32: /* SQL問い合わせ */ 33: String sql = "select * from products WHERE products.name LIKE \'%" + key + "%\'"; 34: Statement state = conn.createStatement(); Stacktrace: org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:102) org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:212) org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:495) org.apache.jasper.compiler.Compiler.compile(Compiler.java:379) org.apache.jasper.compiler.Compiler.compile(Compiler.java:351) org.apache.jasper.compiler.Compiler.compile(Compiler.java:335) org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:595) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:368) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330) javax.servlet.http.HttpServlet.service(HttpServlet.java:742) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
問題のプログラム文
jsp
1<%@ page contentType = "text/html; charset=UTF-8" %> 2<%@ page import = "java.io.*" %> 3<%@ page import = "java.util.*" %> 4<%@ page import = "java.sql.*" %> 5<%! 6String escapeHTML(String s) { 7 return s.replace("&", "&") 8 .replace("\"", """) 9 .replace("<", "<") 10 .replace(">", ">") 11 .replace("'", "'"); 12} 13%> 14<% 15request.setCharacterEncoding("UTF-8"); 16response.setCharacterEncoding("UTF-8"); 17 18Connection conn = null; 19String msg = ""; 20String key = request.getParameter("key"); 21if(request.getParameter("id") != null){ 22 int id_product = Integer.parseInt(request.getParameter("id")); 23} 24else{ 25 int id_product = 0; 26} 27/* データベース接続 */ 28Class.forName("org.sqlite.JDBC"); 29conn = DriverManager.getConnection("jdbc:sqlite:/home/sys/s216336/apache-tomcat-8.5.31/webapps/a4/shopping.db"); 30 31if(id_product.equals(0)){ 32 /* SQL問い合わせ */ 33 String sql = "select * from products WHERE products.name LIKE \'%" + key + "%\'"; 34 Statement state = conn.createStatement(); 35 ResultSet rs = state.executeQuery(sql); 36 ResultSetMetaData md = rs.getMetaData(); 37 int cols = md.getColumnCount(); 38 39 /* 表開始と表頭 */ 40 if(rs != null){ 41 msg += "<table border=\"1\">\n"; 42 msg += "<tr><th> </th>"; 43 for (int i = 2; i <= cols-3; i++) { 44 msg += "<th>" + md.getColumnLabel(i) + "</th>"; 45 } 46 msg += "</tr>\n"; 47 48 /* 表の各行 */ 49 while(rs.next()){ 50 msg += "<tr>"; 51 msg += "<td>" + rs.getRow() + "</td>"; 52 for (int i = 2; i <= cols-3; i++) { 53 msg += "<td>" + escapeHTML(rs.getString(i)) + "</td>"; 54 } 55 msg += "<td><form><button action=\"products.jsp\" method=\"POST\" name=\"id\" value=\"" + rs.getString(1) + "\">カートに追加</button></form></td>"; 56 msg += "</tr>\n"; 57 } 58 /* 表終了 */ 59 msg += "</table>\n"; 60 } 61 else{ 62 msg += "キーワードと一致する商品はありません。"; 63 } 64 65} 66else{ 67// String sql = "insert into chosenproducts(chosenproduct_id, user_id, product_id, quantity, deleted, created_at) values( , 101, , , ,)"; 68} 69%> 70<!DOCTYPE html> 71<html> 72<head> 73<title>検索</title> 74</head> 75<body> 76 <br> 77 検索結果 78 <br><br> 79 <%= msg %> 80 <br> 81 <input type="button" onclick="location.href='top.jsp'" value="TOPへ戻る" /> 82</body> 83</html>
②「SQL文の結果が何も得られなかった時」という条件式を
if(rs != null){}
で実行できなかった原因について教えていただいけると幸いです。
回答2件
あなたの回答
tips
プレビュー