7.1 ResultSetクラス
executeQuery メソッドを用いてデータベースの検索を行うと、検索結果を表す ResultSet オブジェクトが作成されます。
SELECT 文を実行して得られる検索結果は、1 個の表の形をしています。例えば「SELECT ID,NAME FROM GENERAL.EMPLOYEE WHERE ID=1」という SELECT 文を実行した結果は、ID 列と NAME 列で構成される 1 個の表になります。ResultSet は、この表を表すオブジェクトです。
ResultSet オブジェクトを用いて、検索結果の表を行単位で操作することができます。
検索結果の値を得るには、検索結果の特定の行に位置づけ、ResultSet オブジェクトのメソ ッドを用いて ResultSet オブジェクトから値を取り出します。
7.2 ResultSetオブジェクトのカーソル
検索結果の表のデータは、1 度に 1 行ずつ参照することができます。そのためには、どの行 を参照するのかを指定する必要があります。参照する行を指定するためにカーソルという 仕組みを用います。
ResultSet オブジェクトには 1 個のカーソルが用意されています。カーソルを 1 行ずつ進め ながら、検索結果を 1 行ずつ参照します。カーソルを 1 行進めるためには、ResultSet オブ ジェクトの next メソッドを実行します。
ResultSet オブジェクトが作成された時点では、カーソルは第 0 行に位置づけられています。
したがって、検索結果の最初の行を参照するには、まず最初に next メソッドを呼び出す必 要があります。
1 tiger
3 cat
4 monkey
7 snake
9 beaver
ResultSet
第1行 第2行
カーソル
第1列
nextで1行進む
SELECT ID,NAME FROM GENERAL.EMPLOYEE WHERE SECTION=’A’の検索結果
第2列
(例)
// nextメソッドでカーソルを1行ずつ進める。
while (rs.next()) {
// IDとNAMEの値を取り出す。
int iID = rs.getInt(1);
String sName = rs.getString(2);
// 取り出した値を表示させる。
System.out.println("ID = " + iID);
System.out.println("NAME = " + sName);
}
結果の行があればtrue、
なければfalseが返る。
nextメソッドを実行。
検索結果の最終行まで達した状態で、さらに next メソッドを実行すると、next メソッドは false を返します。これによって、アプリケーションはすべての検索結果を参照し終わった ことを知ることができます。
もしも SELECT 文による検索の結果、条件に合うレコードが 1 行も存在しなかったらどうな るでしょうか。その場合、結果が 1 行もない ResultSet オブジェクトが作成されます。そ して、最初の next メソッドの呼び出しで false が返却されます。
7.3 ResultSetオブジェクトから値を取り出す方法
カーソルである行に位置づけたら、ResultSet オブジェクトからデータを取り出すことがで きます。データを取り出すメソッドはデータの型ごとに用意されています。それらのメソ ッドは getXXXX という形の名前になっており、getter メソッドと呼ばれます。
データを取り出す列は、先頭から何番目かという順番で指定します。前節の例では、「SELECT ID,NAME FROM GENERAL.EMPLOYEE WHERE SECTION='A'」の結果を想定しています。検索結果 の表は、1 番目の列が ID、2 番目の列が NAME になっています。
「getString(2)」という操作は、2 番目の列にあるデータを文字列として取り出すことを意 味しています。これによって、Java アプリケーションの中で利用できる String オブジェク トとして、NAME の値が取り出されます。
[補足]
ResultSet から列の値を取り出す方法には、列の番号を指定する方法のほかに、列名を指定する方 法もあります。列名を指定すると結果表の列の並び順を考慮する必要がないため、プログラムが柔 軟になります。一方、列の番号を指定する方が処理は効率的に行えます。