質問するログイン新規登録
pgAdmin

pgAdminは、オープンソースのPostgreSQL管理ツール。様々な機能を持ち、コマンドラインベースでPostgreSQLへ行う操作のほとんどをpgAdminを用いて実行することができます。

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Java

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

1回答

223閲覧

JDBCにてログイン成功させたい

hand45major56

総合スコア0

pgAdmin

pgAdminは、オープンソースのPostgreSQL管理ツール。様々な機能を持ち、コマンドラインベースでPostgreSQLへ行う操作のほとんどをpgAdminを用いて実行することができます。

JDBC

JDBC(Java DataBase Connectivity)は、Javaとリーレーショナルデータベースに接続させる基本的なAPIです。Java上でSQLステートメントを発行することで、データベースの種類に影響を受ないDB操作を可能とします。

Java

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2025/07/17 06:00

編集2025/07/18 09:23

0

0

実現したいこと

ログイン成功時に出てくる写真のような実行結果が出てきてほしい
イメージ説明

発生している問題・分からないこと

データベースでpdAdmin4を使用してカラム(id,password,name,comment,login_time)も間違えていないが、index.htmlにて実行しても
「idとパスワードが間違っています」となり、ログイン成功しない。イメージ説明

該当のソースコード

EmployeeBean.java

1package bean; 2 3/** 4 * ・社員情報データ(モデル) 5 * 6 */ 7 8public class EmployeeBean { 9 10 private String Id; 11 private String PassWord; 12 private String Name; 13 private String Comment; 14 private String Login_Time; 15 16 public void setId(String Id) { 17 this.Id = Id; 18 } 19 20 public String Id() { 21 return Id; 22 } 23 24 public void setPassWord(String PassWord) { 25 this.PassWord = PassWord; 26 } 27 28 public String getPassWord() { 29 return PassWord; 30 } 31 32 public void setName(String Name) { 33 this.Name = Name; 34 } 35 36 public String getName() { 37 return Name; 38 } 39 40 public void setLogin_Time(String Login_Time) { 41 this.Login_Time = Login_Time; 42 } 43 44 public String getLogin_Time() { 45 return Login_Time; 46 } 47 48 public void setComment(String Comment) { 49 this.Comment = Comment; 50 } 51 52 public String getComment() { 53 return Comment; 54 } 55} 56

EmployeeController.java

1 2package controller; 3 4/** 5 * 社員情報管理コントローラー 6 * 7 */ 8 9import java.io.IOException; 10 11import javax.servlet.RequestDispatcher; 12import javax.servlet.ServletContext; 13import javax.servlet.ServletException; 14import javax.servlet.http.HttpServlet; 15import javax.servlet.http.HttpServletRequest; 16import javax.servlet.http.HttpServletResponse; 17 18import bean.EmployeeBean; 19import service.EmployeeService; 20 21public class EmployeeController extends HttpServlet { 22 public void doPost(HttpServletRequest request, HttpServletResponse response) 23 throws ServletException, IOException { 24 25 try { 26 // 問① index.htmlから送信されたIDとPassWordの値を取得できるように修正してください。 27 String id = request.getParameter("id"); 28 String password = request.getParameter("password"); 29 30 /* 31 * IDとPassWordと元に、社員情報を検索する関数の呼び出し、結果をJSPに渡す処理 32 * ※ EmployeeBeanとEmployeeServiceをimportするのを忘れないでください。 33 */ 34 35 // 問② EmployeeServiceクラスをインスタンス化してください。 36 EmployeeService employeeservice = new EmployeeService(); 37 // 問③ EmployeeBeanに、EmployeeServiceよりsearch関数を呼び出し、返り値を格納してください。 38 EmployeeBean returndata = employeeservice.search(id,password); 39 // 問④ 適切な引数をセットしてください。 40 request.setAttribute("EmployeeBean", returndata); 41 42 } catch (Exception e) { 43 e.printStackTrace(); 44 } finally { 45 ServletContext context = this.getServletContext(); 46 RequestDispatcher dispatcher = context.getRequestDispatcher("/index.jsp"); 47 dispatcher.forward(request, response); 48 } 49 } 50} 51

EmployeeService.java

1package service; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.sql.SQLException; 8import java.sql.Statement; 9import java.text.SimpleDateFormat; 10import java.util.Calendar; 11 12import bean.EmployeeBean; 13 14/** 15 * ・社員情報検索サービス 16 * 17 */ 18 19public class EmployeeService { 20 21 // 問① 接続情報を記述してください 22 /** ドライバーのクラス名 */ 23 private static final String POSTGRES_DRIVER = "org.postgresql.Driver"; 24 /** 25 * ・JDMC接続先情報 26 * ポート番号(5432, 5433など)は個人で異なる可能性があります。 27 * 念の為、pgAdminにて対象のpostgreSQLバージョンよりメニューを開き、[プロパティ] -> [接続] を確認してください 28 */ 29 private static final String JDBC_CONNECTION = "jdbc:postgresql://localhost:5432/lesson_db"; 30 /** ・ユーザー名 */ 31 private static final String USER = "postgres"; 32 /** ・パスワード */ 33 private static final String PASS = "postgres"; 34 /** ・タイムフォーマット */ 35 private static final String TIME_FORMAT = "yyyy/MM/dd HH:mm:ss"; 36 37 // 問② 入力されたIDを条件にログイン時間を更新するUPDATE文 38 /** ・SQL UPDATE文 */ 39 private static final String SQL_UPDATE = "UPDATE employee_table SET login_time =? id = ?"; 40 41 // 問③ 入力されたIDとPassWordを条件と合致するデータを検索するSELECT文 42 /** ・SQL SELECT文 */ 43 private static final String SQL_SELECT = "SELECT name, comment, login_time FROM employee_table WHERE id = ? AND \"password\" = ?"; 44 45 EmployeeBean employeeData = null; 46 47 // 送信されたIDとPassWordを元に社員情報を検索するためのメソッド 48 public EmployeeBean search(String id, String password) { 49 50 Connection connection = null; 51 Statement statement = null; 52 ResultSet resultSet = null; 53 PreparedStatement preparedStatement = null; 54 55 try { 56 // データベースに接続 57 Class.forName(POSTGRES_DRIVER); 58 connection = DriverManager.getConnection(JDBC_CONNECTION, USER, PASS); 59 statement = connection.createStatement(); 60 61 // 処理が流れた時間をフォーマットに合わせて生成 62 Calendar cal = Calendar.getInstance(); 63 SimpleDateFormat sdFormat = new SimpleDateFormat(TIME_FORMAT); 64 65 // PreparedStatementで使用するため、String型に変換 66 String login_time = sdFormat.format(cal.getTime()); 67 68 /* 69 * 任意のユーザーのログインタイムを更新できるように、プリペアドステートメントを記述。 70 */ 71 72 73 // preparedStatementに実行したいSQLを格納 74 preparedStatement = connection.prepareStatement(SQL_UPDATE); 75 // 問④ preparedStatementを使って、第一引数に現在時刻を、第二引数にIDをセットしてください。 76 preparedStatement.setString(1,login_time); 77 preparedStatement.setString(2,id); 78 79 // 問⑤ UPDATEを実行する文を記述してください。 80 preparedStatement.executeUpdate(); 81 82 /* 83 * UPDATEが成功したものを即座に表示 84 * 任意のユーザーを検索できるように、プリペアドステートメントを記述。 85 */ 86 preparedStatement = connection.prepareStatement(SQL_SELECT); 87 // 問⑥ preparedStatementを使って、第一引数にIDを、第二引数にPASSWORDをセットしてください。 88 preparedStatement.setString(1,id); 89 preparedStatement.setString(2,password); 90 91 // SQLを実行。実行した結果をresultSetに格納。 92 resultSet = preparedStatement.executeQuery(); 93 94 while (resultSet.next()) { 95 // 問⑦ tmpName,tmpComment,tmpLoginTimeに適当なデータを格納してください。 96 String tmpName = resultSet.getString("name"); 97 String tmpComment = resultSet.getString("comment"); 98 String tmpLoginTime = resultSet.getString("login_time"); 99 100 // 問⑧ EmployeeBeanに⑦で取得したデータを格納してください。 101 employeeData = new EmployeeBean(); 102 employeeData.setName(tmpName); 103 employeeData.setComment(tmpComment); 104 employeeData.setLogin_Time(tmpLoginTime); 105 } 106 107 // forName()で例外発生 108 } catch (ClassNotFoundException e) { 109 e.printStackTrace(); 110 111 // getConnection()、createStatement()、executeQuery()で例外発生 112 } catch (SQLException e) { 113 e.printStackTrace(); 114 115 } finally { 116 try { 117 118 if (resultSet != null) { 119 resultSet.close(); 120 } 121 if (statement != null) { 122 statement.close(); 123 } 124 if (connection != null) { 125 connection.close(); 126 } 127 128 } catch (SQLException e) { 129 e.printStackTrace(); 130 } 131 } 132 return employeeData; 133 } 134} 135

index.jsp

1<%@ page import="bean.EmployeeBean"%> 2 3<% 4 // 問① getAttributeに適切な引数をセットして、EmployeeControllerから渡されたEmployeeBeanを取得してください。 5 EmployeeBean employeeBean = (EmployeeBean) request.getAttribute("employeeBean"); 6%> 7<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 8<html> 9<head> 10<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 11<title>検索結果</title> 12</head> 13<body> 14 <div align="center"> 15 <!-- 検索が成功した場合の表示 --> 16 <% 17 if (employeeBean != null) { 18 %> 19 <table border="1"> 20 <tr> 21 <th>社員名</th> 22 <td><%=employeeBean.getName()%></td> 23 </tr> 24 <tr> 25 <th>コメント</th> 26 <td><%=employeeBean.getComment()%></td> 27 </tr> 28 <tr> 29 <th>ログインタイム</th> 30 <td><%=employeeBean.getLogin_Time()%></td> 31 </tr> 32 </table> 33 34 <!-- 問② それ以外の表示(エラーの場合)--> 35 <% } else { %> 36 <p>IDもしくはパスワードが間違ってます</p> 37 <% } %> 38 </div> 39 40</body> 41</html> 42 43 44

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

同じような現象の方をこちらで見つけ、同じようにコードを打ち直しましたが、
idとパスワードが間違っています。と同じ実行結果となった。

補足

pgAdmin4 のポート番号等が違う可能性があるのですが、
プログラミングが初めてでどこが違うのかわかりませんでした。イメージ説明

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

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

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

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

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

jimbe

2025/07/17 16:58

「idとパスワードが間違っています」というのはどこに出ているのでしょうか。 コードにもスクリーンショットにも見当たらないようなのですが。
hand45major56

2025/07/17 23:27

すみません。画像添付していたのを修正しました。 実行結果のみしか添付できませんでした。 実行前は、eclipseにて、index.htmlを実行。 IDに「09090」、パスワードに「admin」といれましたが 実行結果に「idとパスワードが間違っています。」となってしまいます。
jimbe

2025/07/18 04:44

修正ありがとうございます。 EmployeeController は最終的には index.jsp を出力するようです。 index.jsp もご提示頂けますか?
hand45major56

2025/07/18 09:26

こちらこそご連絡ありがとうございます。 こちらi質問内容の関係上、index/html→index.jspに変更して修正しました。 よろしければご確認をよろしくお願いします
jimbe

2025/07/18 16:44

編集有難う御座います。 質問の 10000 文字制限に引っ掛かってしまいましたか(><
guest

回答1

0

※コードを実行して確認はしていません。

ご存知とと思いますが、 Servlet → jsp のフォワードでのデータ受け渡しは HttpServletRequest オブジェクトの setAttributegetAttribute の組み合わせですが、データの区別は第一引数の文字列で行われます。
その為、対応する set/get では同じ文字列にしなくてはなりません。

ご提示の EmployeeController.java と index.jsp はそれぞれ
request.setAttribute("EmployeeBean", returndata);

EmployeeBean employeeBean = (EmployeeBean) request.getAttribute("employeeBean");
となっており、名前(の大文字小文字)が同じではありません。

また jdbc での接続を疑っておられるようですが、原因に複数の可能性がある場合は、それらを切り分けられるような方法で確認テストを行うことをお勧めします。
例えば EmployeeService クラス(の search メソッド) はサーブレットから呼ばなくても

java

1public class EmployeeServiceTest { 2 public static void main(String args[]) { 3 EmployeeService es = new EmployeeService(); 4 System.out.println("bean=" + es.search("YamadaTaro", "javaman")); 5 } 6}

のようなテストアプリを作ってコマンドで実行してみれば動作確認は出来るはずです。
データベースとの接続で問題があるならアプリでもエラーが出るはずですし、エラーにならなければ サーブレットに問題があるとなり、postgress の設定に問題があるのかと目視確認に時間を取られずに済みます。

また Servlet のほうは一時的に EmployeeService を使う部分をコメント化し直接 Bean を設定することで、index.jsp への動作を確認することが出来ます。

: // 問② EmployeeServiceクラスをインスタンス化してください。 //EmployeeService employeeservice = new EmployeeService(); // 問③ EmployeeBeanに、EmployeeServiceよりsearch関数を呼び出し、返り値を格納してください。 //EmployeeBean returndata = employeeservice.search(id,password); EmployeeBean returndata = new EmployeeBean(); returndata.setName("YamadaTaro"); :

コード内のコメントから何かの課題のようですが、提出するまではどのように弄っても大丈夫なのではないでしょうか。
プログラムは途中幾ら弄っても最終的に不要部分を消してしまえば他人には途中の試行錯誤等は分かりません。一部を取り出して動かして見るとか逆に一部を省略・置き換えて動かして見るとかはプロでも普通にやっていることですので、じゃんじゃん動かしてみてください。

投稿2025/07/18 17:17

編集2025/07/19 06:44
jimbe

総合スコア13359

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問