前提・実現したいこと
PreparedStatementでエラーが発生してしまう事の解消
発生している問題・エラーメッセージ
重大: Servlet.service() for servlet [ServletName] in context with path [/projectname] threw exception [サーブレットの実行により例外を投げました] with root cause [木 8 22 21:19:37 JST 2019]
該当のソースコード
java
1package web; 2 3import java.io.IOException; 4import java.sql.Connection; 5import java.sql.DriverManager; 6import java.sql.PreparedStatement; 7import java.sql.ResultSet; 8import java.sql.SQLException; 9 10import javax.servlet.ServletException; 11import javax.servlet.annotation.WebServlet; 12import javax.servlet.http.HttpServlet; 13import javax.servlet.http.HttpServletRequest; 14import javax.servlet.http.HttpServletResponse; 15 16import com.fasterxml.jackson.databind.ObjectMapper; 17 18/** 19 * Servlet implementation class Schedule 20 */ 21@WebServlet("/ServletName") 22public class ServletName extends HttpServlet { 23 private static final long serialVersionUID = 1L; 24 25 /** 26 * @see HttpServlet#HttpServlet() 27 */ 28 public ServletName() { 29 super(); 30 // TODO Auto-generated constructor stub 31 } 32 33 /** 34 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 35 */ 36 protected void doGet(HttpServletRequest request, HttpServletResponse response) 37 throws ServletException, IOException { 38 main(request, response); 39 } 40 41 /** 42 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 43 */ 44 protected void doPost(HttpServletRequest request, HttpServletResponse response) 45 throws ServletException, IOException { 46 main(request, response); 47 } 48 49 protected String main(HttpServletRequest request, HttpServletResponse response) 50 throws ServletException, IOException { 51 Connection conn = null; 52 53 String a = request.getParameter("a"); 54 String b = null; 55 56 try { 57 Class.forName("com.mysql.jdbc.Driver"); 58 59 conn = DriverManager.getConnection(url, user, password); 60 String sql = "SELECT * FROM TABLE WHERE COLUM = ?"; 61 PreparedStatement ps = conn.prepareStatement(sql); 62 ps.setString(1, a); 63 64 ResultSet rs = ps.executeQuery(); 65 66 while (rs.next()) { 67 b = rs.getString("COLUMN-NAME") 68 } 69 70 } catch (SQLException e) { 71 System.out.println("SQLException:" + e.getMessage()); 72 } catch (ClassNotFoundException) { 73 e.printStackTrace(); 74 } 75 76 return b; 77 } 78
試したこと
デバッグモードで検証したところ、PreparedStatementの行でエラーが発生している模様です。
補足情報(FW/ツールのバージョンなど)
先日、初歩的な確認漏れが原因で進まなかったエラーに対して質問して、無事に解決していただきました。
感謝と共に、自分の調査能力の低さを痛感しました。
今回のエラーは、その解決直後から起こっていたエラーなのですが、すぐに聞かずに自分で調べてみようと思い
検索をかけたり、メッセージの内容を理解しようとしていましたが、エラーメッセージが何故起きているのか、
内容がどういう物なのか特定に至りませんでした。
今回は、この解決策についてもお伺いしたいのですが、調査についてコツや見るべきポイント等も
合わせてご教授いただければより幸いだと思い質問させていただきました。
お手数おかけしますが、ご助言いただければと思います。よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー