6 従業員IDによる検索
従業員IDで検索は、指定した従業員IDに基づいて特定の従業員を検索します。
従業員IDは、EMPLOYEES
表の主キーです。HR Webアプリケーションに有効な従業員IDを入力し、送信してデータベースから対応する従業員詳細をフェッチします。
JavaBean.java
で新しいメソッドgetEmployee(int)
を宣言します。- 新しいメソッド
getEmployee(int)
をJavaBeanImpl.java
で実装します。 - 新しいコードを
WebController.java
に追加して、リクエストとレスポンスを処理します。 - 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
新しいメソッドを宣言するステップ:
- IntelliJで
JdbcBean.java
ファイルを開きます。JdbcBean.javaクラスを作成するには、JDBC接続のためのJava Beanインタフェースの作成を参照してください。同じクラスを使用し、各機能に対して新しいメソッドを宣言します。 - 次のコード・スニペットを追加して、従業員IDを入力として取る
getEmployee(int)
メソッドを宣言します。public List<Employee> getEmployee(int empId);
クラス名: src/main/java/com/oracle/jdbc/samples/bean/JdbcBeanImpl.java
Githubの場所: JdbcBeanImpl.java
新しいメソッドを実装するステップ:
- IntelliJで
JdbcBeanImpl.java
ファイルを開きます。JdbcBeanImpl.java
クラスを作成するには、JDBC接続のためのJava Bean実装の作成を参照してください。同じクラスを使用し、各機能に対して新しい実装メソッドを追加します。 - 次のコード・スニペットを追加して、
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
コードを追加するステップ:
WebController.java
クラスを開きます。WebController.java
を作成するには、リクエストを処理するサーブレットの作成を参照してください。同じクラスを使用して、必要なコードを追加します。- 従業員IDを取得する変数
ID_KEY
を宣言します。これはグローバル変数であるため、processRequest()
メソッドの外部で、ただしWebController
クラスの内部で宣言します。private static final String ID_KEY = "id";
- メソッド
processRequest()
は、ListAll機能ですでに作成されています。次に、従業員IDによる検索機能を実装するコードを追加します。 ユーザーからの入力を取得する文字列型の変数値を宣言します。String value = null;
- 新しい機能を処理する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ページを作成するステップ:
- 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>
- 従業員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";
- リクエストの送信時、つまりいずれかの機能のリンクが選択されたときのアクションを定義します。
xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { processResponse(xmlhttp.responseText); } } xmlhttp.open("GET", url, true); xmlhttp.send();
- 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; }