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

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

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

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

Eclipse

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

解決済

社員表の一覧表示画面を作ろうとしています。しかしDBから値を取ることが出来ず解決できていません。

yyuukkii
yyuukkii

総合スコア0

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

Eclipse

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

1回答

0評価

1クリップ

90閲覧

投稿2020/06/20 12:22

編集2022/01/12 10:58

今回DBと接続し社員の一覧表を出そうとしています。

【現状】
・一覧画面は出せています。
・DBと接続は出来ています。(ログイン画面で登録されているユーザーを確認するときには動いています。)
・記述したSQL文はMySQL上では値が取れました。

【起きている問題】
・DBの値のみ取れていない状況です。
・EmployeeListDao内のResultSet rs という変数に値が入り、rs.next()でデータを取得しようとしましたが、
デバッガを使ったところこのrsの部分で値が反映されずSQLExceptionに流れてしまう。
・コンソールにエラーメッセージは特に出てこない。


ServletクラスとDaoクラスの(SQLException e)e.printStackTrace();の下にthrow e;を加えました。
変更後エラーが表示されるようになりました。

500エラー
javax.servlet.ServletException: サーブレットの実行により例外を投げました
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

根本原因
java.lang.Error: Unresolved compilation problem:
処理されない例外の型 SQLException

servlet.ListServlet.doGet(ListServlet.java:35) javax.servlet.http.HttpServlet.service(HttpServlet.java:634) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

【コンソールのエラー】
重大: パス[/Manager]を持つコンテキスト内のサーブレット[servlet.ListServlet]のServlet.service() が例外[サーブレットの実行により例外を投げました]が根本的要因と共に投げられました。

javaを始めたばかりで検討が付きません。
お手数ですが、ご教授いただけないでしょうか?
宜しくお願いいたします。

List.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="List.css"> <title>一覧画面</title> </head> <body> <header> <h2>社員一覧</h2> <div class="logout"> <a class="register" href="/Manager/Login">ログアウト</a> </div> <div class="new-register"> <input type="submit" value="新規登録"> </div> </header> <div class="list-area"> <div class="container"> <table class="list-table"> <tbody> <tr> <th class="list">No</th> <th class="list">会社</th> <th class="list">事業部</th> <th class="list">氏名</th> <th class="list">氏名(ひらがな)</th> <th class="list">年齢</th> <th class="list">担当管理営業</th> <th class="list">入社日</th> <th class="list">稼働状況</th> <th class="list">詳細</th> <th class="list">削除</th> </tr> <c:forEach var="list" items="${ lists }"> <tr> <td>${ list.employee_id }</td> <td>${ list.company_name }</td> <td>${ list.department }</td> <td>${ list.name }</td> <td>${ list.name_hiragana }</td> <td>${ list.birthday }</td> <td>${ list.business_manager }</td> <td>${ list.enter_date }</td> <td>${ list.commissioning_status }</td> <td><a href="#">詳細画面</a></td> <td><a href="#">削除</a></td> </tr> </c:forEach> </tbody> </table> </div> </div> </body> </html>

EmployeeListDao

package dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; import model.EmployeeListModel; public class EmployeeListDao { public List<EmployeeListModel> findAll() { List<EmployeeListModel> model = new ArrayList<EmployeeListModel>(); ConnectionUtil db = new ConnectionUtil(); Connection conn = null; PreparedStatement ps = null; String sql = "SELECT * " + "FROM employee_info a " + "INNER JOIN employee_state b " + "ON a.employee_id = b.employee_info_id " + "INNER JOIN company_info c " + "ON a.company_info_id = c.company_id " + "WHERE a.is_deleted = 0 order by a.employee_id;"; try { conn = db.getConnection(); ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery(); while(rs.next()) { //ここで値が取れずSQLExceptionに流れてしまう。 EmployeeListModel elm = new EmployeeListModel(); elm.setEmployee_id(rs.getInt("employee_id")); elm.setCompany_name(rs.getString("company_name")); elm.setName(rs.getString("name")); elm.setName_hiragana(rs.getString("name_hiragana")); elm.setBirthday(rs.getDate("birthday")); elm.setDepartment(rs.getString("department")); elm.setEnter_date(rs.getDate("enter_date")); elm.setCommissioning_status(rs.getString("commissioning_status")); model.add(elm); } } catch (SQLException e) { e.printStackTrace();              throw e; //追加しました。 } catch (Exception e) { e.printStackTrace(); } finally { db.allClose(ps, conn); } return model; } }

ListServlet

package servlet; import java.io.IOException; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import dao.EmployeeListDao; import model.EmployeeListModel; /** * Servlet implementation class List */ @WebServlet("/List") public class ListServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public ListServlet() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { EmployeeListDao dao = new EmployeeListDao(); List<EmployeeListModel> lists = null;           //ここにもSQLException追加しないと×マークがついてしまうので追加しました。 try { lists = dao.findAll(); } catch (SQLException e) { e.printStackTrace(); } request.setAttribute("lists", lists); RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/List.jsp"); dispatcher.forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } }

DB接続共通処理ConnectionUtil

package dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException; public class ConnectionUtil { //JDBCドライバーと接続先データベース名を代入 private static String driverName = "com.mysql.cj.jdbc.Driver"; private static String url = "jdbc:mysql://localhost:3306/company?characterEncoding=UTF8&serverTimezone=JST"; //userアカウントを代入 private static final String user = "root"; private static final String pass = "Sy"; //DB接続のメソッド public Connection getConnection() { try { Class.forName(driverName); return DriverManager.getConnection(url, user, pass); } catch (Exception e) { throw new IllegalArgumentException(e); } } //DB close処理 public void allClose(PreparedStatement ps, Connection conn) { if (ps != null) { try { ps.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

shiketa
shiketa

2020/06/20 13:40

> このrsの部分で値が反映されずSQLExceptionに流れてしまう。 流れてしまって、 > e.printStackTrace(); スタックトレースの内容を提示しないと、きっと答えは得られません。それこそが肝心の情報。
yyuukkii
yyuukkii

2020/06/20 13:55

そうなんですね! e.printStackTrace()はコンソールで出る内容でしょうか? そのあたりもわからずすみません・・・
yyuukkii
yyuukkii

2020/06/21 09:58

標準エラー・ストリームの確認方法が調べたのですがわかりませんでした。 画面上に表示されるエラーという事でよろしいでしょうか?(404や500エラーが表示される画面) 画面遷移は行われてしまいList.jspの画面になります。(DBの値は取れていません。) 画面上にはエラー内容が出てきていません。 標準エラー・ストリームの内容間違っていたらすみません。
shiketa
shiketa

2020/06/21 12:09 編集

標準エラーわからないですか。404や500の原因を知りたいんですよね?この状態で「404や500エラーが表示される画面」を見せられても、はてさて。 例外を適切に扱えないのであれば、try-catchをやめて ` public List<EmployeeListModel> findAll() throws Exception {`と書き変えてしまったほうが、むしろ「404や500エラーが表示される画面」にあなたにとって有用な情報が出力されるかと。
shiketa
shiketa

2020/06/21 12:08

ここも。`protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception`
yyuukkii
yyuukkii

2020/06/21 13:55

ありがとうございます。 ちなみにprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception { にしてしまうと「例外 Exception は HttpServlet.doGet(HttpServletRequest, HttpServletResponse) にある throws 節と矛盾します」 どこを修正していますか?
hope_mucci
hope_mucci

2020/06/22 10:05

SQLException を catch している部分の、e.printStackTrace();の下に`throw e;`と書いて処理を実行してください。おそらく画面にスタックトレースが出てくると思います。それをコピーして質問に追記してください。 } catch (SQLException e) { e.printStackTrace(); throw e;
yyuukkii
yyuukkii

2020/06/22 10:32

hope_mucci様 ありがとうございます。 エラーは表示されるようになりました。
javahack
javahack

2020/06/22 10:44

それでエラーは見せてもらえないのでしょうか?
hope_mucci
hope_mucci

2020/06/22 10:47

せっかく投げたSQLExceptionが握りつぶされてしまっています。 doGet の throws句に`SQLException`を追加して、try-catch文を全部削除してください。 あと、開発環境を追記してください。ツール、エディタは何を使っていますか?OSは? また、デバッガを使って処理を追うことができるのならcatchに入ったeの中身を覗けないですか?
yyuukkii
yyuukkii

2020/06/22 10:47

すみません本文に載せてしまいました! 500エラー javax.servlet.ServletException: サーブレットの実行により例外を投げました org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 根本原因 java.lang.Error: Unresolved compilation problem: 処理されない例外の型 SQLException servlet.ListServlet.doGet(ListServlet.java:35) javax.servlet.http.HttpServlet.service(HttpServlet.java:634) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 【コンソールのエラー】 重大: パス[/Manager]を持つコンテキスト内のサーブレット[servlet.ListServlet]のServlet.service() が例外[サーブレットの実行により例外を投げました]が根本的要因と共に投げられました。 こちらです! デバッグしたところServletでEmployeeListDaoのインスタンスを作る時に例外処理に流れてしまいました。
yyuukkii
yyuukkii

2020/06/22 11:06

申し訳ございません! try/cacthは消してdoGetのthrows句にSQLExcepionを追加しましたが、×マークが付き 例外 SQLException は HttpServlet.doGet(HttpServletRequest, HttpServletResponse) にある throws 節と矛盾します - javax.servlet.http.HttpServlet.doGet をオーバーライドします と出てしまいどこを修正すれば良いのでしょうか? すみません catchの中に入ったeの中身の確認方法はわかりません。 開発環境は Pleiades eclipse  MySQL  tomcat  Windows などを使っています。
hope_mucci
hope_mucci

2020/06/22 11:18

eclipse使っているなら、 ・e.printStacktraceの行にブレークポイントを仕掛ければそこで停止できる  その状態でeにマウスカーソルを当てたり変数のペインに表示されているeを見ると中身がわかる ・スタックトレースはウィンドウ下部の「コンソール」に全て出力されています。
yyuukkii
yyuukkii

2020/06/22 11:44

ありがとうございます。 ブレークポイントやってみます。
shiketa
shiketa

2020/06/22 13:35

ServletもJSPもまったく関係なさげなので、EmployeeListDaoクラスにmainメソッド作って実行してみりゃいいんじゃないでしょうかね。try-catchは取っぱらって。 ``` public class EmployeeListDao { public static void main(String[] args) throws Exception { new EmployeeListDao().findAll(); } public List<EmployeeListModel> findAll() throws SQLException{ ... } ```

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Java EE

Java EE(Java Enterprise Edition)はJavaベースのテクノロジーとその相互運用の仕様をまとめたものです。サーバとクライアントのアーキテクチャを規定し、特定アプリケーションのクラス用に定義されたテクノロジー設定のプロファイルを使用します。

Java

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

Eclipse

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