6 従業員IDによる検索
「従業員IDによる検索」は、主キーである従業員IDに基づいて特定の従業員を検索できる機能です。ユーザーは従業員IDを入力してリクエストを送信する必要があります。
Employee Java Bean
クラス名: src/main/java/com/oracle/jdbc/samples/bean/EmployeeBean.java
Githubの場所: EmployeeBean.java
説明: IDにより従業員を検索する新しいメソッドgetEmployee(int)です。
実行する手順:
手順1: getEmployee(int)
メソッドの宣言
手順1: getEmployee(int)
メソッドを宣言する手順
1. ファイルEmployeeBeanは、1日目に"ListAll"機能ですでに作成されています。同じクラスを使用して、各機能に対して新しいメソッドを追加できます。
2. 新しい行で、EmployeeIdをパラメータとして使用するgetEmployee(int)メソッドを宣言します。
public List<Employee>
getEmployee(int empId)
;
新しいメソッドgetEmployee(int)
をEmployeeBeanImpl.java
に実装します。
Githubの場所: EmployeeBeanImpl.java
説明: IDにより従業員を検索する新しいメソッドgetEmployee(int)を実装します。このメソッドは、従業員IDを入力パラメータとして使用してEmployee型のオブジェクトを返します。
実行する手順:
手順2: 新しいメソッドgetEmployee(int)
を実装します。
手順2: getEmployee(int)
メソッドを作成する手順:
1. Employee型のオブジェクトのリストを返すgetEmployee(int)メソッドを宣言します。
public List<Employee> getEmployee(int empId) {
2. List<Employee>型の戻り値の変数を宣言します
List<Employee> returnValue = new ArrayList<>();
3. 最初のtryブロックは、メソッドgetConnection()を呼び出してデータベース接続を取得するためのものです。データベース接続を確立するために可変接続を宣言します。
try (Connection connection = getConnection()) {
4. PreparedStatementを作成するために別のtryブロックを開始します。PreparedStatementには、従業員IDに基づいて従業員を選択するために実行する必要がある問合せが含まれます。
try (PreparedStatement preparedStatement = connection.prepareStatement("SELECT Employee_Id, First_Name, Last_Name, Email, Phone_Number, Job_Id, Salary FROM EMPLOYEES WHERE Employee_Id = ?")) {
5. 問合せの従業員IDである入力パラメータを設定します。 preparedStatement.setInt(1, empId);
6. ResultSetの別のtryブロックを開始します。
try (ResultSet resultSet = preparedStatement.executeQuery()) {
7. 返されたものがあるかどうかを確認します。はいの場合は、returnValueに追加し、それ以外の場合は例外をスローします。
if(resultSet.next()) {
returnValue.add(new Employee(resultSet));
} else {
throw new SQLException("No recrods found");
}
8. すべてのtryブロックのカッコを必ず閉じてください。合計3つのtryブロックを閉じる必要があります。 9. SQLExceptionを捕捉し、次に示すようにロガーにメッセージを記録します。
catch (SQLException ex) {
logger.log(Level.SEVERE, null, ex);
throw ex;
}
10. メソッドgetEmployee(int)から従業員のリストを返します。return returnValue;
リクエストを処理するコードのサーブレットへの追加
クラス名: src/main/java/com/oracle/jdbc/samples/web/WebController.java
Githubの場所: WebController.java
説明: このサーブレットは、1日目ですでに作成されています。従業員IDによる検索に関連するコードを追加します。
実行する手順:
手順3: 従業員IDで検索するコードをメソッドprocessRequest()
に追加します。
手順3: processRequest()
へのコードの追加手順:
1. 従業員IDを取得する変数ID_KEYを宣言します。これはグローバル変数であるため、メソッドprocessRequest()
外で宣言する必要がありますが、WebController
クラス内で宣言する必要があります。
private static final String ID_KEY = "id";
2. メソッドprocessRequest()は、"ListAll"機能ですでに作成されています。「従業員IDによる検索」機能を実装するコードを追加します。
3. ユーザーからの入力を取得する文字列型の変数値を宣言します。
String value = null;
4. "ListAll"機能に追加されたものに加えて、新しい機能を処理する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の作成
クラス名:
src/main/webapp/listById.html
Githubの場所: listById.html
説明: これは、従業員IDを入力する入力ボックスを示すHTMLです。従業員レコードが見つかった場合は、その従業員の詳細がページに表示されます。それ以外の場合は、エラー・メッセージが表示されます。
実行する手順:
手順4: HTMLページのtitle、headおよびstylesheetを作成します。
手順5: 入力フィールド(従業員IDなど)を送信する関数を作成します
手順6: JSONレスポンスを処理して結果をHTMLページに表示するメソッドprocessResponse()を作成します。
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>
手順5: 入力フィールドを処理する手順:1. 従業員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();
手順6: processResponse()
メソッドを作成する手順1. 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;
}