前提・実現したいこと
入力画面から入力された検索文字列に「部分一致」するIDを持つレコードを表示するプログラムを作っています。
原因がわかる方いませんか?
IDを入力すると以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
エラーメッセージ 重大: サーブレット [WhereSelectServlet] のServlet.service()が例外を投げました
該当のソースコード
Java (WhereSelectServlet.java) package websample; import java.io.IOException; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class WhereSelectServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { String id = request.getParameter("id"); String sql = "SELECT * FROM tb_staff WHERE id '%"+id+"%'"; Connection con = null; Statement smt = null; try { con = DBManager.getConnection(); smt = con.createStatement(); ResultSet rs = smt.executeQuery(sql); ArrayList<Account>list = new ArrayList<>(); while(rs.next()) { Account account = new Account(); account.setId(rs.getString("id")); account.setName(rs.getString("name")); account.setMail(rs.getString("mail")); account.setAuthority(rs.getString("authority")); list.add(account); } request.setAttribute("list", list); }catch(SQLException e) { throw new ServletException(e); }finally { if(smt!=null) { try {smt.close();}catch(SQLException ignore) {} } if(con!=null) { try {con.close();}catch(SQLException ignore) {} } } request.getRequestDispatcher("/JSP/select.jsp").forward(request, response); } }
(select_input.jsp) <%@ page contentType="text/html;charset=Windows-31J"%> <html> <head> <title>検索</title> </head> <body> <form action="<%=request.getContextPath() + "/websample.WhereSelectServlet" %>"method="get"> <p>IDに含まれる文字を入力してください</p> <input type="text" name="id"> <input type="submit" value="検索"> </form> </body> </html> (select.jsp) <%@ page contentType="text/html;charset=UTF-8"%> <%@ page import="java.util.ArrayList, websample.Account"%> <html> <head> <title>一覧</title> </head> <body> <table border="1"> <tr><th>Id</th><th>Name</th><th>Mail</th><th>Authority</th></tr> <% ArrayList<Account>list =(ArrayList<Account>)request.getAttribute("list"); if(list!=null) { for(int i=0; i<list.size(); i++) { Account account = list.get(i); %> <tr> <td><%=account.getId() %></td> <td><%=account.getName() %></td> <td><%=account.getMail() %></td> <td><%=account.getAuthority() %></td> </tr> <% } } %> </table> </body> </html>
(DBManager.java) package websample; import java.sql.Connection; import java.sql.DriverManager; public class DBManager { public static Connection getConnection() { try { Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/" + "test_db?useUnicode=true&characterEncoding=utf8"); return con; }catch(Exception e) { throw new IllegalStateException(e); } } }
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
Version: 2020-12 (4.18.0)
あなたの回答
tips
プレビュー