Javaの問題が分からないので教えてください。
EmployeeController①〜④
EmployeeService②〜⑧
SQLのカラム名は
・id
・password
・name
・comment
・login_time
EmploBean
1public class EmployeeBean { 2 private String Id; 3 private String PassWord; 4 private String Name; 5 private String Comment; 6 private String Login_Time; 7 public void setId(String Id) { 8 this.Id = Id; 9 } 10 public String Id() { 11 return Id; 12 } 13 public void setPassWord(String PassWord) { 14 this.PassWord = PassWord; 15 } 16 public String getPassWord() { 17 return PassWord; 18 } 19 public void setName(String Name) { 20 this.Name = Name; 21 } 22 public String getName() { 23 return Name; 24 } 25 public void setLogin_Time(String Login_Time) { 26 this.Login_Time = Login_Time; 27 } 28 public String getLogin_Time() { 29 return Login_Time; 30 } 31 public void setComment(String Comment) { 32 this.Comment = Comment; 33 } 34 public String getComment() { 35 return Comment; 36 } 37}
EmployeeController
1public class EmployeeController extends HttpServlet { 2 public void doPost(HttpServletRequest request, HttpServletResponse response) 3 throws ServletException, IOException { 4 try { 5 // 問① index.htmlから送信されたIDとPassWordの値を取得できるように修正してください。 6 String id = request.getParameter("id"); 7 String password = request.getParameter("pass"); 8 /* 9 * IDとPassWordと元に、社員情報を検索する関数の呼び出し、結果をJSPに渡す処理 10 * ※ EmployeeBeanとEmployeeServiceをimportするのを忘れないでください。 11 */ 12 // 問② EmployeeServiceクラスをインスタンス化してください。 13 EmployeeService emps = new EmployeeService(); 14 // 問③ EmployeeBeanに、EmployeeServiceよりsearch関数を呼び出し、返り値を格納してください。 15 emps.search("postgres", "otikuyj"); 16 // 問④ [null]に適切な引数をセットしてください。 17 request.setAttribute("EmployeeBean", id); 18 } catch (Exception e) { 19 e.printStackTrace(); 20 } finally { 21 ServletContext context = this.getServletContext(); 22 RequestDispatcher dispatcher = context.getRequestDispatcher("/index.jsp"); 23 dispatcher.forward(request, response); 24 } 25 } 26}
EmployeeService
1public class EmployeeService { 2 // 問① 接続情報を記述してください 3 /** ドライバーのクラス名 */ 4 private static final String POSTGRES_DRIVER = "org.postgresql.Driver"; 5 /** 6 * ・JDMC接続先情報 7 * ポート番号(5432, 5433など)は個人で異なる可能性があります。 8 * 念の為、pgAdminにて対象のpostgreSQLバージョンよりメニューを開き、[プロパティ] -> [接続] を確認してください 9 */ 10 private static final String JDBC_CONNECTION = "jdbc:postgresql://localhost:5432/Employee_db"; 11 /** ・ユーザー名 */ 12 private static final String USER = "postgres"; 13 /** ・パスワード */ 14 private static final String PASS = "otikuyj"; 15 /** ・タイムフォーマット */ 16 private static final String TIME_FORMAT = "yyyy/MM/dd HH:mm:ss"; 17 // 問② 入力されたIDを条件にログイン時間を更新するUPDATE文 18 /** ・SQL UPDATE文 */ 19 private static final String SQL_UPDATE = "update employee_table set '?' = to_char(current_timestamp, 'yyyy/MM/dd HH24:MI:SS') where id = '?'"; 20 // 問③ 入力されたIDとPassWordを条件と合致するデータを検索するSELECT文 21 /** ・SQL SELECT文 */ 22 private static final String SQL_SELECT = "select * from employee_table where id = '?' AND password = '?'"; 23 EmployeeBean employeeData = null; 24 // 送信されたIDとPassWordを元に社員情報を検索するためのメソッド 25 public EmployeeBean search(String id, String password) { 26 Connection connection = null; 27 Statement statement = null; 28 ResultSet resultSet = null; 29 PreparedStatement preparedStatement = null; 30 try { 31 // データベースに接続 32 Class.forName(POSTGRES_DRIVER); 33 connection = DriverManager.getConnection(JDBC_CONNECTION, USER, PASS); 34 statement = connection.createStatement(); 35 // 処理が流れた時間をフォーマットに合わせて生成 36 Calendar cal = Calendar.getInstance(); 37 SimpleDateFormat sdFormat = new SimpleDateFormat(TIME_FORMAT); 38 // PreparedStatementで使用するため、String型に変換 39 String login_time = sdFormat.format(cal.getTime()); 40 /* 41 * 任意のユーザーのログインタイムを更新できるように、プリペアドステートメントを記述。 42 */ 43 // preparedStatementに実行したいSQLを格納 44 preparedStatement = connection.prepareStatement(SQL_UPDATE); 45 // 問④ preparedStatementを使って、第一引数に現在時刻を、第二引数にIDをセットしてください。 46 preparedStatement.setString(1, login_time); 47 preparedStatement.setString(2, id); 48 // 問⑤ UPDATEを実行する文を記述してください。 49 preparedStatement.executeUpdate(SQL); 50 /* 51 * UPDATEが成功したものを即座に表示 52 * 任意のユーザーを検索できるように、プリペアドステートメントを記述。 53 */ 54 preparedStatement = connection.prepareStatement(SQL_SELECT); 55 // 問⑥ preparedStatementを使って、第一引数にIDを、第二引数にPASSWORDをセットしてください。 56 preparedStatement.setString(1, id); 57 preparedStatement.setString(2, password); 58 // SQLを実行。実行した結果をresultSetに格納。 59 resultSet = preparedStatement.executeQuery(); 60 while (resultSet.next()) { 61 // 問⑦ tmpName,tmpComment,tmpLoginTimeに適当なデータを格納してください。 62 String tmpName = resultSet.getString("name"); 63 String tmpComment = resultSet.getString("comment"); 64 String tmpLoginTime = resultSet.getString("login_time"); 65 // 問⑧ EmployeeBeanに⑦で取得したデータを格納してください。 66 employeeData = new EmployeeBean(); 67 employeeData.setName("tmpNam"); 68 employeeData.setComment("tmpComment"); 69 employeeData.setLogin_Time("tmpLoginTime"); 70 } 71 // forName()で例外発生 72 } catch (ClassNotFoundException e) { 73 e.printStackTrace(); 74 // getConnection()、createStatement()、executeQuery()で例外発生 75 } catch (SQLException e) { 76 e.printStackTrace(); 77 } finally { 78 try { 79 if (resultSet != null) { 80 resultSet.close(); 81 } 82 if (statement != null) { 83 statement.close(); 84 } 85 if (connection != null) { 86 connection.close(); 87 } 88 } catch (SQLException e) { 89 e.printStackTrace(); 90 } 91 } 92 return employeeData; 93 } 94}
問題はわかるのですがある程度回答も記載されているように見えますが、、、
今記載されているものを修正するのですか?
それとも答え合わせをするのですか?
質問の本筋が分かりませんでした、、、
何かの課題でしょうか?
→https://teratail.com/help/avoid-asking
「意図的に内容が抹消された質問」
https://teratail.com/help/delete-policy
編集履歴から確認できるとはいえ、「自分だけ解決すればそれでいい」というスタンスの人はプログラミングに向きません。
運営にも通報しました。いずれ、運営から元に戻されるでしょう。
あと、解決したならお礼よりも回答者へフィードバックを(お礼でも回答にコメントすべきで)。
https://teratail.com/help/question-tips#questionTips4-2
回答2件
あなたの回答
tips
プレビュー