今回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(); } } } }
回答1件
あなたの回答
tips
プレビュー