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の主なメソッド

○ ファイル

StatementTest.javaファイルをコピーして、次のファイルを作成してください。

ファイル名 ResultSetTest.java

サンプルダウンロード

○ プログラム

次のようにプログラムを入力してください。

ResultSetTest.java

  1. import java.sql.Connection;
  2. import java.sql.DriverManager;
  3. import java.sql.ResultSet;
  4. import java.sql.Statement;
  5. public class ResultSetTest{
  6.     public static void main(String[] args){
  7.         try{
  8.             //JDBCドライバークラスを指定する
  9.             String drivername = "com.mysql.cj.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("user_name"));
  30.                 System.out.printf("パスワード:%s ", rs.getString(3));
  31.                 System.out.printf("氏名:%s\n", rs.getString("name"));
  32.             }
  33.             //ResutlSetオブジェクトを閉じる
  34.             rs.close();
  35.             //データベースを切断する
  36.             st.close();
  37.             con.close();
  38.         }catch(Exception e){
  39.             //例外の状態を出力する
  40.             e.printStackTrace();
  41.         }
  42.     }
  43. }

○ コンパイルと実行

C:¥work>javac ResultSetTest.java
C:¥work>java -cp mysql-connector-java-8.0.22.jar;. ResultSetTest
ID:1 ユーザー名:sato パスワード:spass 氏名:佐藤
ID:2 ユーザー名:suzuki パスワード:spass 氏名:鈴木
ID:3 ユーザー名:takahashi パスワード:tpass 氏名:高橋
ID:4 ユーザー名:takana パスワード:tpass 氏名:田中

C:¥work>

○ 解説

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

カーソルとnextメソッド
カーソルとnextメソッド

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

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

前へ   次へ