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

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

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

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

2回答

1286閲覧

サーブレット/MySQLの通信、接続が上手くいきません

minman

総合スコア6

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2019/08/22 12:34

編集2019/08/25 10:15

前提・実現したいこと

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/ツールのバージョンなど)

先日、初歩的な確認漏れが原因で進まなかったエラーに対して質問して、無事に解決していただきました。
感謝と共に、自分の調査能力の低さを痛感しました。

今回のエラーは、その解決直後から起こっていたエラーなのですが、すぐに聞かずに自分で調べてみようと思い
検索をかけたり、メッセージの内容を理解しようとしていましたが、エラーメッセージが何故起きているのか、
内容がどういう物なのか特定に至りませんでした。

今回は、この解決策についてもお伺いしたいのですが、調査についてコツや見るべきポイント等も
合わせてご教授いただければより幸いだと思い質問させていただきました。
お手数おかけしますが、ご助言いただければと思います。よろしくお願いします。

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

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

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

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

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

root_jp

2019/08/22 12:39

下記、かっこ閉じられてないです。 (ClassNotFoundException
minman

2019/08/22 12:47

申し訳ございません。こちら質問時の編集ミスでした。 実際のソースコードでは閉じられています。失礼しました。
guest

回答2

0

打ち間違え等も発見できなかったので、再入力などして試行錯誤していました。
本日再度どうにか解決できないかとEclipseを起動してサーブレットを実行してみたら、
何故か普通に通りました。

原因が分れば追記したいと思います。ありがとうございました。

投稿2019/08/26 15:01

minman

総合スコア6

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

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

0

ベストアンサー

PreparedStatementの行でエラーが発生している模様です。

java

1PreparedStatement ps = conn.prepareStatement(sql);

この行のことでしょうか。

java

1 conn = DriverManager.getConnection(url, user, password); 2

の引数3つがいずれも定義されていないように見受けられます。

投稿2019/08/23 00:43

tetutetu

総合スコア419

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

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

minman

2019/08/24 02:49

そこは文字列でそのままURL、ユーザー名、パスワードを入力してあります。公開しても問題ない物か分からなかったので伏せています。分かりづらいことをして申し訳ありませんでした。 エラー原因が分からなかったのでデバッグモードで進めた結果、PreparedSteatmentの行に入る直前か、入った後でエラーメッセージが出力される所まで確認している状態です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問