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 | カーソルを前の行に移動する |
○ ファイル
StatementTest.javaファイルをコピーして、次のファイルを作成してください。
ファイル名 | ResultSetTest.java |
---|
○ プログラム
次のようにプログラムを入力してください。
ResultSetTest.java
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.Statement;
- public class ResultSetTest{
- public static void main(String[] args){
- try{
- //JDBCドライバークラスを指定する
- String drivername = "com.mysql.cj.jdbc.Driver";
- //データベースを指定する
- String url = "jdbc:mysql://localhost:3306/books? characterEncoding=utf8";
- //ユーザー名を指定する
- String username = "root";
- //パスワードを指定する
- String password = "";
- //指定したドライバークラスを読み込む
- Class.forName(drivername);
- //データベースに接続する
- Connection con = DriverManager.getConnection(url, username, password);
- //usersテーブルのデータを取得するSQL文を作成する
- String sql = "SELECT * FROM users";
- //Statementオブジェクトを取得する
- Statement st = con.createStatement();
- //SQL文を実行する
- ResultSet rs = st.executeQuery(sql);
- //データを取得する
- while(rs.next()){
- System.out.printf("ID:%s ", rs.getString(1));
- System.out.printf("ユーザー名:%s ", rs.getString("user_name"));
- System.out.printf("パスワード:%s ", rs.getString(3));
- System.out.printf("氏名:%s\n", rs.getString("name"));
- }
- //ResutlSetオブジェクトを閉じる
- rs.close();
- //データベースを切断する
- st.close();
- con.close();
- }catch(Exception e){
- //例外の状態を出力する
- e.printStackTrace();
- }
- }
- }
○ コンパイルと実行
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を返すので、レコードがある間繰り返すようになります。
38~41行目でカーソルが指しているレコードのデータを読み込んでいます。2つの方法でデータを読み込んでいます。38、40行目では、1から始まる列番号を指定しています。39、41行目では列名を指定しています。列を指定するには、この2つの方法を指定できます。データを読み込み終わった後、45行目でResutlSetを閉じています。これ以降、取得したResultSetを使ってSQL文の実行結果を読み込むことができなくなります。