6 従業員IDによる検索

従業員IDで検索は、指定した従業員IDに基づいて特定の従業員を検索します。

従業員IDは、EMPLOYEES表の主キーです。HR Webアプリケーションに有効な従業員IDを入力し、送信してデータベースから対応する従業員詳細をフェッチします。 従業員IDを使用して従業員を検索します。

この章では、従業員IDによる検索機能の作成に必要なコードの追加について学習します。次の方法について学習します。
  1. JavaBean.javaで新しいメソッドgetEmployee(int)を宣言します。
  2. 新しいメソッドgetEmployee(int)JavaBeanImpl.javaで実装します。
  3. 新しいコードをWebController.javaに追加して、リクエストとレスポンスを処理します。
  4. HTMLページlistById.htmlを作成して、結果を表示します。

Jdbc Java Bean

JBedbcan.javaおよびJdbcBeanImpl.javaでそれぞれ新しいメソッドgetEmployee(int)を宣言および実装します。このメソッドは、従業員IDを入力パラメータとして使用してEmployee型のオブジェクトを返します。

クラス名: src/main/java/com/oracle/jdbc/samples/bean/JdbcBean.java

Githubの場所: JdbcBean.java

新しいメソッドを宣言するステップ:

  1. IntelliJでJdbcBean.javaファイルを開きます。JdbcBean.javaクラスを作成するには、JDBC接続のためのJava Beanインタフェースの作成を参照してください。同じクラスを使用し、各機能に対して新しいメソッドを宣言します。
  2. 次のコード・スニペットを追加して、従業員IDを入力として取るgetEmployee(int)メソッドを宣言します。
    public List<Employee> getEmployee(int empId);

クラス名: src/main/java/com/oracle/jdbc/samples/bean/JdbcBeanImpl.java

Githubの場所: JdbcBeanImpl.java

新しいメソッドを実装するステップ:

  1. IntelliJでJdbcBeanImpl.javaファイルを開きます。JdbcBeanImpl.javaクラスを作成するには、JDBC接続のためのJava Bean実装の作成を参照してください。同じクラスを使用し、各機能に対して新しい実装メソッドを追加します。
  2. 次のコード・スニペットを追加して、getEmployee(int)メソッドを実装します。
    
    public List<Employee> getEmployee(int empId) {
      List<Employee> returnValue = new ArrayList<>();
    
    /*Get the database connection*/
      try (Connection connection = getConnection()) {
    /* Insert the SQL statement to fetch an employee using the employee Id */
        try (PreparedStatement preparedStatement = connection.prepareStatement(
            "SELECT Employee_Id, First_Name, Last_Name, Email, Phone_Number, Job_Id, Salary FROM EMPLOYEES WHERE Employee_Id = ?")) {
            preparedStatement.setInt(1, empId);       /* Set the input parameter */
            try (ResultSet resultSet = preparedStatement.executeQuery()) {
            if(resultSet.next()) {    /* Check if the resultSet has any value */
              returnValue.add(new Employee(resultSet)); 
            }
          }
        }
      } catch (SQLException ex) {    /* Catch the SQLException and log the message in logger*/
    logger.log(Level.SEVERE, null, ex);
        ex.printStackTrace();
      }
    
    return returnValue;   /* Return the List of Employees */
    }

リクエストを処理するコードのサーブレットへの追加

従業員IDで検索するための関連コードをWebController.javaに追加します。

クラス名: src/main/java/com/oracle/jdbc/samples/web/WebController.java

Githubの場所: WebController.java

コードを追加するステップ:

  1. WebController.javaクラスを開きます。WebController.javaを作成するには、リクエストを処理するサーブレットの作成を参照してください。同じクラスを使用して、必要なコードを追加します。
  2. 従業員IDを取得する変数ID_KEYを宣言します。これはグローバル変数であるため、processRequest()メソッドの外部で、ただしWebControllerクラスの内部で宣言します。
    private static final String ID_KEY = "id";
  3. メソッドprocessRequest()は、ListAll機能ですでに作成されています。次に、従業員IDによる検索機能を実装するコードを追加します。 ユーザーからの入力を取得する文字列型の変数値を宣言します。
    String value = null;
  4. 新しい機能を処理するIF条件を追加します。ユーザーが入力した従業員IDを取得し、メソッドgetEmployee(int)を起動して従業員レコードが存在するかどうかを確認します。
    if ((value = request.getParameter(ID_KEY)) != null) {
          int empId = Integer.valueOf(value).intValue();
          employeeList = employeeBean.getEmployee(empId);
       } else { 
          // Previously used getEmployees() method for Listall feature
          employeeList = employeeBean.getEmployees();
       }
    

従業員IDによる検索のための新規HTMLの作成

ユーザーが従業員IDを入力するための入力プレースホルダを示すHTMLページ。従業員レコードが見つかった場合は、従業員の詳細がページに表示され、それ以外の場合はエラー・メッセージが表示されます。

クラス名:src/main/webapp/listById.html

Githubの場所: listById.html

HTMLページを作成するステップ:

  1. HTMLページのtitle、stylesheetおよびbodyを作成します。
    <!DOCTYPE html>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>List Employee by Id</title>
    <!-- Specify the stylesheet here -->
    <link rel="stylesheet" type="text/css" href="css/app.css" >
    <!-- Bootstrap JS for the UI -->
    <link rel="stylesheet" 
    href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css">
    </head>
    
  2. 従業員IDを取得するための<body> タグと<input> タグを開始します。
    <body>
    <div><label>Employee Id: </label>
    <input id="empId" type="textfield"
    onkeypress="return waitForEnter(event)"\>
    </div>
    <br/>
    <br/>
    <script>
    function waitForEnter(e) {
      if (e.keyCode == 13) {
        var tb = document.getElementById("empId");
        fetchElementById(tb.value)
        return false;
      }
    }
    <script>
    var xmlhttp = new XMLHttpRequest();
    var url = "WebController";
    
  3. リクエストの送信時、つまりいずれかの機能のリンクが選択されたときのアクションを定義します。
    xmlhttp.onreadystatechange=function() {
         if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
           processResponse(xmlhttp.responseText);
         }
       }
    xmlhttp.open("GET", url, true);
    xmlhttp.send();
    
  4. HTMLページにJSON結果を表示するprocessResponse()関数を作成します。
    function processResponse(response) {
    //Process the JSON respnse into an array.
    var arr = JSON.parse(response);
         var i;
    var out = "<table>";
    keys = Object.keys(arr[0]);
    
    // Print Headers
    out += "<tr>"
    for(i = 0; i < keys.length; ++i) {
    out += "<th>"+keys[i]+"</th>"
    }
    out += "</tr>";
    // Print values
    for(j = 0; j < arr.length; j++) {
    out += "<tr>"
    for(i = 0; i < keys.length; ++i) {
    out += "<td>"+arr[j][keys[i]]+"</td>"
    
    }
    out += "</tr>"
    }
    out += "</table>";
    document.getElementById("id-emp").innerHTML = out;
    }