ResultSetオブジェクト

 ResultSetインタフェースは、データベースからSQL文の実行結果を読み込む際に使用します。データベースに接続した状態で使います。このインタフェースで定義されているメソッドを使って1件ずつ読み込むことができます。読み込むときにはカーソル(指し棒)の考え方を使います。カーソルを動かして、カーソルが指す行を読み込みます。

■ 主なメソッド

メソッド名 概要
absolute カーソルを指定した行に移動する
afterLast カーソルを最終行の直後に移動する
close このオブジェクトを閉じる
first カーソルを先頭行に移動する
getArray 現在の行の列の値を、Arrayオブジェクトとして取得する
getDate 現在の行の列の値を、Dateオブジェクトとして取得する
getDouble 現在の行の列の値を、double値として取得する
getInt 現在の行の列の値を、int値として取得する
getRow 現在の行番号を取得する
getString 現在の行の列の値を、Stringオブジェクトとして取得する
isClose このオブジェクトが閉じているかどうかを取得する
isFirst カーソルが先頭行にあるかどうかを取得する
isLast カーソルが最終行にあるかどうかを取得する
last カーソルを最終行に移動する
next カーソルを次の行に移動する
previous カーソルを前の行に移動する
SqlDataReaderの主なメソッド

○ プロジェクト

 プロジェクトを作成して確認してみましょう。Usersテーブルからデータを読み込むプログラムを作成してみましょう。

プロジェクト名 ResultSetTest

サンプルダウンロード

〇 作成の準備

 StatementTestプロジェクトをコピーして作成してください。

○ プログラム

 mainメソッドに次のように記述してください。

  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.ResultSet;
  4. import java.sql.Statement;
  5. public class ConnectionTest {
  6.  public static void main(String[] args) {
  7.   try{
  8.    //JDBCドライバークラスを指定する
  9.    String drivername = "com.mysql.jdbc.Driver";
  10.    //データベースを指定する
  11.    String url = "jdbc:mysql://localhost:3306/books?characterEncoding=utf8";
  12.    //ユーザー名を指定する
  13.    String username = "root";
  14.    //パスワードを指定する
  15.    String password = "";
  16.    //指定したドライバークラスを読み込む
  17.    Class.forName(drivername);
  18.    //データベースに接続する
  19.    Connection con = DriverManager.getConnection(url, username, password);
  20.    //Usersテーブルのデータを取得するSQL文を作成する
  21.    String sql = "SELECT * FROM Users";
  22.    //Statementオブジェクトを取得する
  23.    Statement st = con.createStatement();
  24.    //SQL文を実行する
  25.    ResultSet rs = st.executeQuery(sql);
  26.    //データを取得する
  27.    while(rs.next()){
  28.     System.out.printf("ID:%s ", rs.getString(1));
  29.     System.out.printf("ユーザー名:%s ", rs.getString("UserName"));
  30.     System.out.printf("パスワード:** ", rs.getString(3));
  31.     System.out.printf("氏名:%s\n", rs.getString(4));
  32.    }
  33.    //ResutlSetオブジェクトを閉じる
  34.    rs.close();
  35.    //データベースを切断する
  36.    con.close();
  37.   }catch(Exception e){
  38.    //例外の状態を出力する
  39.    e.printStackTrace();
  40.   }
  41.  }
  42. }

○ 実行結果

ID:1 ユーザー名:sato パスワード:** 氏名:佐藤
ID:2 ユーザー名:suzuki パスワード:** 氏名:鈴木
ID:3 ユーザー名:takahashi パスワード:** 氏名:高橋
ID:4 ユーザー名:tanaka パスワード:** 氏名:田中

○ 解説

 29行目で、Usersテーブルから全件取得するSQL文を作成しています。そして、35行目でSQL文を実行しています。executeQueryメソッドはResultSetオブジェクトを返します。このオブジェクトを使って、SQL文の実行結果を取り出します。このオブジェクトは、初期状態でカーソルは1件目の前を指しています。データを読み込む場合は、38行目にあるようにnextメソッドを呼び出してカーソルをずらします。今回はwhile文の条件でnextメソッドを使っていますが、nextメソッドはカーソルで指すデータがなくなるとfalseを返すので、レコードがある間繰り返すようになります。

 39~42行目でカーソルが指しているレコードのデータを読み込んでいます。2つの方法でデータを読み込んでいます。39,41,42行目では、1から始まる列番号を指定しています。40行目では列名を指定しています。データを読み込み終わった後、46行目でResutlSetを閉じています。これ以降、取得したResultSetを使ってSQL文の実行結果を読み込むことができなくなります。

データベースとResultSetオブジェクトの関係
データベースとResultSetオブジェクトの関係

前へ   次へ