次はデータベースからレコードを取得する部分です。下記ソースが今回使用する [ getuserdata.jsp ] の全てです。
<%@ page language="java" contentType="text/html; charset=Windows-31J" %>
<%@ page import="java.sql.*" %>
<html>
<body>
<table table width="550" border="1" cellspacing="0" cellpadding="2">
<tr>
<th width="15%">社員番号</th>
<th width="30%">ユーザID</th>
<th width="55%">ユーザ名</th>
</tr>
<%
Connection con = null;
Statement smt = null;
ResultSet rst = null;
// Oracle JDBC Driverのロード
Class.forName("oracle.jdbc.driver.OracleDriver");
/* データベースへ接続 */
con = DriverManager.getConnection (
"jdbc:oracle:thin:@localhost:1521:jdbcsample",
"usid",
"pswd");
// ステートメントを作成
smt = con.createStatement();
// 問合せの実行
rst = smt.executeQuery("select user_id, employee_no, user_name from user_master");
// 問合せ結果の表示
while ( rst.next() ) {
%>
<!-- 一行ごと出力 -->
<tr>
<td><%=rst.getString("employee_no")%></td>
<td><%=rst.getString("user_id")%></td>
<td><%=rst.getString("user_name")%></td>
</tr>
<%
}
// 結果セットをクローズ
rst.close();
// ステートメントをクローズ
smt.close();
//接続をクローズ
con.close();
%>
</table>
</body>
</html>
SQLの実行
SELECT SQLを実行するときには、Connectionオブジェクトから取得した Statementオブジェクトの executeQueryメソッドを使用します。 SQLの実行結果は ResultSetオブジェクトとして返されます。ResultSetインタフェースで定義される主なメソッドは以下のようなものがあります。
| メソッド名 |
概要 |
| boolean next() |
カーソルを次の行に移動 |
| int getInt(String colName) |
フィールドの値をJavaデータ型の intで取得する |
| double getDouble(String colName) |
フィールドの値をJavaデータ型の doubleで取得する |
| String getString(String colName) |
フィールドの値をJavaデータ型の Stringで取得する |
|
サンプルでは、user_masterテーブルから、user_id、employee_no、user_nameフィールドを取得します。
rst = smt.executeQuery("select user_id, employee_no, user_name from user_master");
結果の操作
SQLで取得した レコード全件を参照するために、 rst.next() メソッドが false を返すまで while ステートメントを使用して繰り返しを行ないます。 ResultSetオブジェクトは取得した当初先頭のレコードを参照していますが、この next() メソッドを実行することで参照するレコードを順に進めていきます。
現在参照するレコードの各フィールドのデータを取り出すには
getXXX()メソッド を使用します。 getString()メソッドで値を取得して、出力するHTMLタグで整形し出力しています。
// 問合せ結果の表示
while ( rst.next() ) {
%>
<!-- 一行ごと出力 -->
<tr>
<td><%=rst.getString("employee_no")%></td>
<td><%=rst.getString("user_id")%></td>
<td><%=rst.getString("user_name")%></td>
</tr>
<%
}
各オブジェクトのクローズ
オープンした、レコードセット、ステートメント、コネクションをクローズします。
rst.close();
smt.close();
con.close();
正常に処理が行われると以下のようにテーブルでデータベースの内容が出力されます