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

Q&A

0回答

649閲覧

jdbcでデータベースからの情報を表示

taki.muramatsu

総合スコア7

JDBC

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

Java

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

HTML

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

0グッド

0クリップ

投稿2022/10/17 16:02

編集2022/10/18 02:13

0

0

前提

javaでログイン機能の学習をしている最中に
教材と同じ手順でやっていたのにも関わらず

エラーではないがデータベスから情報が上手く取得出来ません

データベースはpdAdmin4を使用
カラムは
id
password
name
comment
login_time

下記フォルダ階層になります
イメージ説明
html,jspはwebapp下です

下記よりソースコードになります

EmployeeBean.java

java

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

EmployeeController.java

java

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

EmployeeService.java

java

1mployeeBean; 2 3/** 4 * ・社員情報検索サービス 5 */ 6 7public class EmployeeService { 8 9 // 問① 接続情報を記述してください 10 /** ドライバーのクラス名 */ 11 private static final String POSTGRES_DRIVER = "org.postgresql.Driver"; 12 /** ・JDBC接続先情報 */ 13 private static final String JDBC_CONNECTION = "jdbc:postgresql://localhost:5432/Employee_table"; 14 /** ・ユーザー名 */ 15 private static final String USER = "postgres"; 16 /** ・パスワード */ 17 private static final String PASS = "taiki0316"; 18 /** ・タイムフォーマット */ 19 private static final String TIME_FORMAT = "yyyy/MM/dd HH:mm:ss"; 20 21 // 問② 入力された値で、UPDATEする文 22 /** ・SQL UPDATE文 */ 23 private static final String SQL_UPDATE = "update employee_table set ? = to_char(current_timestamp, 'yyyy/MM/dd HH24:MI:SS') where id = ?"; 24 // 問③ 入力されたIDとPassWordをキーにして、検索するSELECT文 25 /** ・SQL SELECT文 */ 26 private static final String SQL_SELECT = "SELECT * FROM Employee_table WHERE id=?AND password = ?"; 27 28 EmployeeBean employeeDate = null; 29 30 // 送信されたIDとPassWordを元に社員情報を検索するためのメソッド 31 public EmployeeBean search(String id, String password) { 32 33 Connection connection = null; 34 Statement statement = null; 35 ResultSet resultSet = null; 36 PreparedStatement preparedStatement = null; 37 38 try { 39 // データベースに接続 40 Class.forName(POSTGRES_DRIVER); 41 connection = DriverManager.getConnection(JDBC_CONNECTION, USER, PASS); 42 statement = connection.createStatement(); 43 44 // 処理が流れた時間をフォーマットに合わせて生成 45 Calendar cal = Calendar.getInstance(); 46 SimpleDateFormat sdFormat = new SimpleDateFormat(TIME_FORMAT); 47 48 // PreparedStatementで使用するため、String型に変換 49 String login_time = sdFormat.format(cal.getTime()); 50 51 /* 52 * 任意のユーザーのログインタイムを更新できるように、プリペアドステートメントを記述。 53 */ 54 55 // preparedStatementに実行したいSQLを格納 56 preparedStatement = connection.prepareStatement(SQL_UPDATE); 57 // 問④ preparedStatementを使って、一番目のindexに今の時間をセットしてください。2番目のindexにIDをセットしてください。 58 preparedStatement.setString(1,login_time); 59 preparedStatement.setString(2,id); 60 61 // 問⑤ UPDATEを実行する文を記述 62 preparedStatement.executeUpdate(); 63 /* 64 * UPDATEが成功したものを即座に表示 65 * 任意のユーザーを検索できるように、プリペアドステートメントを記述。 66 */ 67 preparedStatement = connection.prepareStatement(SQL_SELECT); 68 //問⑥ 一番目のindexにIDをセットしてください。2番目のindexにPASSWORDをセット。 69 preparedStatement.setString(1, id); 70 preparedStatement.setString(2, password); 71 // SQLを実行。実行した結果をresultSetに格納。 72 resultSet = preparedStatement.executeQuery(); 73 74 while (resultSet.next()) { 75 // 問⑦ tmpName,tmpComment,tmpLoginTimeに適当な値を入れてください。 76 String tmpName = resultSet.getString("name"); 77 String tmpComment = resultSet.getString("comment"); 78 String tmpLoginTime = resultSet.getString("login_time"); 79 80 // 問⑧ EmployeeBeanに取得したデータを入れてください。 81 employeeDate = new EmployeeBean(); 82 employeeDate.setName(tmpName); 83 employeeDate.setComment(tmpComment); 84 employeeDate.setLogin_Time(tmpLoginTime); 85 } 86 87 // forName()で例外発生 88 } catch (ClassNotFoundException e) { 89 e.printStackTrace(); 90 91 // getConnection()、createStatement()、executeQuery()で例外発生 92 } catch (SQLException e) { 93 e.printStackTrace(); 94 95 } finally { 96 try { 97 98 if (resultSet != null) { 99 resultSet.close(); 100 } 101 if (statement != null) { 102 statement.close(); 103 } 104 if (connection != null) { 105 connection.close(); 106 } 107 108 } catch (SQLException e) { 109 e.printStackTrace(); 110 } 111 } 112 return employeeDate; 113 } 114}

index.css

css

1@charset "utf-8"; 2 3.wrapper{ 4 margin: 0 auto; 5 width: 400px 6} 7.header{ 8 float: auto; 9 margin-top: 10px; 10 width: 400pX; 11 text-align: left; 12 /* 問① 背景を青色にする */ 13 background-color: blue; 14 /* 問② 文字の色を白にする */ 15 color:white; 16 /* 問③ 背景に対して文字を縦方向に中央揃え */ 17 align-items: center; 18 19} 20 21ul li { 22 margin-top: 10px; 23 list-style: none; 24 } 25 26label { 27 width: 100px; 28 float: left; 29} 30 31ul { 32 width: 400px; 33 margin: 0 auto; 34} 35input#button { 36 display: block; 37 margin: 0 auto; 38} 39ul li.pass { 40 margin-bottom: 15px; 41} 42 43.footer{ 44 float: auto; 45 margin-top: 10px; 46 width: 400pX; 47 text-align: left; 48 /* 問④ 背景を青色にする */ 49 background-color:blue; 50 51 /* 問⑤ 文字の色を白にする */ 52 color:white; 53 54 /* 問⑥ 背景に対して文字を縦方向に中央揃え */ 55 align-items: center; 56 57}

index.html

html

1<!DOCTYPE html> 2<html> 3<head> 4<meta charset="UTF-8"> 5<title>社員情報システム</title> 6<link rel="stylesheet" type="text/css" href="./CSS/index.css"> 7</head> 8<body> 9 <form action="/8-1/search" method="post"> 10 <div class="wrapper"> 11 <div class="header">社員情報システム</div> 12 <ul> 13 <!-- ID入力欄 --> 14 <li class="id"> 15 <label for="id">ID</label> 16 <input type="text" name="id" value="" size="20"> 17 </li> 18 <!-- パスワードを入力する欄を作成してください --> 19 <li class="pass"> 20 <label for="password">password</label> 21 <input type="text" name="password" value="" size="20"> 22 </li> 23 24 <!-- 検索ボタン --> 25 <li><input id="button" type="submit" name="button" value="検索"> 26 </li> 27 </ul> 28 <div class="footer">hoge.inc</div> 29 </div> 30 </form> 31</body> 32</html>

index.jsp

java

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

web.xml

xml

1<?xml version="1.0" encoding="UTF-8"?> 2<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0"> 3 <display-name>8-1</display-name> 4 <servlet> 5 <servlet-name>search</servlet-name> 6 <servlet-class>controller.EmployeeController</servlet-class> 7 </servlet> 8 <servlet-mapping> 9 <servlet-name>search</servlet-name> 10 <url-pattern>/search</url-pattern> 11 </servlet-mapping> 12 <welcome-file-list> 13 <welcome-file>index.html</welcome-file> 14 </welcome-file-list> 15</web-app> 16

実現したいこと

id,パスワードが正しい場合
画面遷移後に
社員名、コメント、ログインタイム表示
間違いの場合に
画面遷移後「ID,パスワードが間違ってます」と表示

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.25%

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

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

質問する

関連した質問