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

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

新規登録して質問してみよう
ただいま回答率
85.37%
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で実装されています。

Q&A

解決済

1回答

3968閲覧

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

yyuukkii

総合スコア7

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で実装されています。

0グッド

1クリップ

投稿2020/06/20 12:22

編集2020/06/22 11:53

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

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

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

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() throws SQLException{ //SQLExceptionを入れないと注意が出る 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; //追加しました。findAll()にthrows句を置かないとここで注意がでます。 } 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(); } //SQLExceptionをいれると- 例外 SQLException は HttpServlet.doGet(HttpServletRequest,     //HttpServletResponse) にある throws節と矛盾します // javax.servlet.http.HttpServlet.doGet をオーバーライドしますとでてしまいます。 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws SQLExcepion ServletException, IOException { EmployeeListDao dao = new EmployeeListDao(); List<EmployeeListModel> lists = dao.findAll(); 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(); } } } }

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

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

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

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

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

shiketa

2020/06/20 13:40

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

2020/06/20 13:55

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

2020/06/21 09:58

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

2020/06/21 12:09 編集

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

2020/06/21 12:08

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

2020/06/21 13:55

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

2020/06/22 10:05

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

2020/06/22 10:32

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

2020/06/22 10:44

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

2020/06/22 10:47

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

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

2020/06/22 11:18

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

2020/06/22 11:44

ありがとうございます。 ブレークポイントやってみます。
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{ ... } ```
guest

回答1

0

自己解決

ありがとうございました。
エラー内容を確認し値が取れました。

投稿2020/07/01 11:52

yyuukkii

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問