javaで管理システムを作ります。 どうしても分からないので教えて頂きたいです。 SQLのテーブル名employee_table カラム名は ・id ・password ・name ・comment ・login_time あらかじめ、("09090","admin","nanaumishinya","javaman")が入っています。 HTMLの入力画面からid:09090とpassword:adminと入力されると、 ユーザーのnameとcommentとlogin_timeが表示されるようにしたいのですが、 以下のようなエラーが出てしまっていて解決できません。 EmployeeServiceのコードがおかしいのかと思っています。 どこが間違いなのか教えて頂きたいです。
エラーメッセージ
java.lang.ClassNotFoundException: org.postgresql.Driver at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1401) at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1224) at java.base/java.lang.Class.forName0(Native Method) at java.base/java.lang.Class.forName(Class.java:375) at service.EmployeeService.search(EmployeeService.java:53) at controller.EmployeeController.doPost(EmployeeController.java:41) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:689) at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:770) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:223) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:185) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:158) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:543) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:353) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:870) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1696) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:831)
ソースコード
package service; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.text.SimpleDateFormat; import java.util.Calendar; import bean.EmployeeBean; public class EmployeeService { /** ドライバーのクラス名 */ private static final String POSTGRES_DRIVER = "org.postgresql.Driver"; /** ・JDMC接続先情報 */ private static final String JDBC_CONNECTION = "jdbc:postgresql://localhost:5432/Employee"; /** ・ユーザー名 */ private static final String USER = "postgres"; /** ・パスワード */ private static final String PASS = "postgres"; /** ・タイムフォーマット */ private static final String TIME_FORMAT = "yyyy/MM/dd HH:mm:ss"; // 入力されたIDを条件にログイン時間を更新するUPDATE文 /** ・SQL UPDATE文 */ private static final String SQL_UPDATE = "UPDATE EMPLOYEE_TABLE SET LOGIN_TIME = ? WHERE ID = ?"; // 入力されたIDとPassWordを条件と合致するデータを検索するSELECT文 /** ・SQL SELECT文 */ private static final String SQL_SELECT = "SELECT * FROM EMPLOYEE_TABLE WHERE ID = ? AND PASSWORD = ?; "; EmployeeBean employeeData = null; // 送信されたIDとPassWordを元に社員情報を検索するためのメソッド public EmployeeBean search(String id, String password) { Connection connection = null; Statement statement = null; ResultSet resultSet = null; PreparedStatement preparedStatement = null; try { Class.forName(POSTGRES_DRIVER); connection = DriverManager.getConnection(JDBC_CONNECTION, USER, PASS); // getConnection()で例外発生 statement = connection.createStatement(); // 処理が流れた時間をフォーマットに合わせて生成 Calendar cal = Calendar.getInstance(); SimpleDateFormat sdFormat = new SimpleDateFormat(TIME_FORMAT); // PreparedStatementで使用するため、String型に変換 String login_time = sdFormat.format(cal.getTime()); /* * 任意のユーザーのログインタイムを更新できるように、プリペアドステートメントを記述。 */ // preparedStatementに実行したいSQLを格納 preparedStatement = connection.prepareStatement(SQL_UPDATE); //preparedStatementを使って、第一引数に現在時刻を、第二引数にIDをセット preparedStatement.setString(1, login_time); preparedStatement.setString(2, id); //UPDATEを実行する文 preparedStatement.executeUpdate(); /* * UPDATEが成功したものを即座に表示 任意のユーザーを検索できるように、プリペアドステートメントを記述。 */ preparedStatement = connection.prepareStatement(SQL_SELECT); // preparedStatementを使って、第一引数にIDを、第二引数にPASSWORDをセット preparedStatement.setString(1, id); preparedStatement.setString(2, password); // SQLを実行。実行した結果をresultSetに格納。 resultSet = preparedStatement.executeQuery(); while (resultSet.next()) { // tmpName,tmpComment,tmpLoginTimeに適当なデータを格納 String tmpName = resultSet.getString("name"); String tmpComment = resultSet.getString("comment"); String tmpLoginTime = resultSet.getString("login_time"); // EmployeeBeanに⑦で取得したデータを格納 EmployeeBean employeeData = new EmployeeBean(); employeeData.setName(tmpName); employeeData.setComment(tmpComment); employeeData.setLogin_Time(tmpLoginTime); } // forName()で例外発生 } catch (ClassNotFoundException e) { e.printStackTrace(); // getConnection()、createStatement()、executeQuery()で例外発生 } catch (SQLException e) { e.printStackTrace(); } finally { try { if (resultSet != null) { resultSet.close(); } if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } catch (SQLException e) { e.printStackTrace(); } } return employeeData; } }
ソースコード
package bean; public class EmployeeBean { private String Id; private String PassWord; private String Name; private String Comment; private String Login_Time; public void setId(String Id) { this.Id = Id; } public String Id() { return Id; } public void setPassWord(String PassWord) { this.PassWord = PassWord; } public String getPassWord() { return PassWord; } public void setName(String Name) { this.Name = Name; } public String getName() { return Name; } public void setLogin_Time(String Login_Time) { this.Login_Time = Login_Time; } public String getLogin_Time() { return Login_Time; } public void setComment(String Comment) { this.Comment = Comment; } public String getComment() { return Comment; } }
ソースコード
package controller; import java.io.IOException; import bean.EmployeeBean; import jakarta.servlet.RequestDispatcher; import jakarta.servlet.ServletContext; import jakarta.servlet.ServletException; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import service.EmployeeService; public class EmployeeController extends HttpServlet { @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { // index.htmlから送信されたIDとPassWordの値を取得 String id = request.getParameter("id"); String password = request.getParameter("pass"); System.out.println(password); /* * IDとPassWordと元に、社員情報を検索する関数の呼び出し、結果をJSPに渡す処理 ※ * EmployeeBeanとEmployeeServiceをimportするのを忘れないでください。 */ // EmployeeServiceクラスをインスタンス化 EmployeeService eys = new EmployeeService(); //EmployeeBeanに、EmployeeServiceよりsearch関数を呼び出し、返り値を格納 EmployeeBean empData = eys.search(id, password); // 適切な引数をセット。 request.setAttribute("EmployeeBean", empData); } catch (Exception e) { e.printStackTrace(); } finally { ServletContext context = this.getServletContext(); RequestDispatcher dispatcher = context.getRequestDispatcher("/index.jsp"); dispatcher.forward(request, response); } } }
ソースコード
<%@page import="service.EmployeeService"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="bean.EmployeeBean"%> <%@ page import="controller.EmployeeController"%> <% // getAttributeに適切な引数をセットして、EmployeeControllerから渡されたEmployeeBeanを取得 EmployeeBean employeeBean = (EmployeeBean) request.getAttribute("EmployeeBean"); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>検索結果</title> </head> <body> <div align="center"> <!-- 検索が成功した場合の表示 --> <% if (employeeBean != null) { %> <table border="1"> <tr> <th>社員名</th> <td><%=employeeBean.getName()%></td> </tr> <tr> <th>コメント</th> <td><%=employeeBean.getComment()%></td> </tr> <tr> <th>ログインタイム</th> <td><%=employeeBean.getLogin_Time()%></td> </tr> </table> <!-- 問② それ以外の表示(エラーの場合)--> <% }else { %> <p>IDもしくはパスワードが間違っています</p> <% } %> </div> </body> </html> ### 試したこと ドライバーの接続情報が間違っていると思ったのですが、他のファイルで試してみると接続できていたので間違っていないと思います。 jarファイルのパスも通しています。 SQL文も間違っていないようなので、本当にどこが間違っているのか分からないです
無関係の質問タグが並んでいるように見えますが、どういう意図があるのでしょうか。
https://teratail.com/help/question-tips#questionTips32
本件と無関係なタグは外してください。
日本語による説明がコードのマークダウン内のようにならないようにしてください。
コードのマークダウン内になってしまうと開閉やスクロール等でとても読み難くなってしまいます。
また、コードはそれぞれに何のコードなのか、言語名やファイル名等を付加してください。全て「ソースコード」ではテキトウ過ぎます。
なお、JDBC ドライバのクラスが読めないというエラーは FAQ なみによくあることで、ネットにも teratail にも情報があります。それらを検索等されていないのでしょうか。
ドライバはどこに置いてるんでしょう。
どのようにパスを通しているのでしょう。

回答1件
あなたの回答
tips
プレビュー