JavaのResultSetとは?SELECTの検索結果を1行ずつ読むカーソルの考え方

最終更新日

Schoo Java入門 中級 第1回 データベース処理

本記事は、Schooの「Java入門 中級【2026年版】」第1回「エンタープライズアプリケーションとデータベース処理」を学ぶ前後に、JDBCの ResultSet とカーソルの考え方を整理したい方向けの記事です。

JDBCでSELECT文を実行すると、検索結果は ResultSet として受け取ります。ただし、検索結果の表を一気に取り出すのではなく、カーソルを1行ずつ進めながら値を読みます。

Schoo コースページ:Java入門 中級【2026年版】

ResultSetはSELECTの検索結果を受け取る部品

executeQuery(sql) でSELECT文を実行すると、結果は ResultSet に入ります。

String sql = "SELECT id, title, artist FROM songs";
ResultSet rs = stmt.executeQuery(sql);
図解:SELECTの検索結果全体のイメージ
実行したSQL
SELECT id, title, artist FROM songs
↓ 検索結果として表が返ってくる
id
title
artist
1
夜明けのビート
スカイライン
2
夕暮れコード
Blue Notes
この表全体を ResultSet として受け取り、あとからカーソルを動かしながら1行ずつ読みます。
ResultSetにはSELECTの検索結果全体が入ります。ただし、値を読むときはカーソルが指している1行を対象にします。

ここで大切なのは、rs がすぐに1行目のデータを指しているわけではないことです。最初の状態では、カーソルは検索結果の先頭行の手前にあります。

図解:ResultSetはカーソルを1行ずつ動かして読む

ボタンを押すたびに rs.next() が呼ばれ、カーソルが次の行へ進みます。行がある間だけ、while文の中で現在行の値を読み取ります。

カーソルの位置
先頭行の手前
rs.next() の戻り値
まだ実行していない
現在読み取れる値
まだどの行も読めません
SELECTの検索結果
カーソルはここから開始
カーソル
id
title
artist
1
夜明けのビート
スカイライン
2
夕暮れコード
Blue Notes
次の行がない位置
この処理と対応
ResultSet rs = stmt.executeQuery(sql);while (rs.next()) {    int id = rs.getInt("id");    String title = rs.getString("title");    String artist = rs.getString("artist");    System.out.println(title + " / " + artist);}
最初はまだ行を指していません。まず rs.next() を実行して1行目へ進みます。
ResultSet は、検索結果の中にある「現在読んでいる行」をカーソルで示しながら進みます。

rs.next() は次の行へ進む処理

rs.next() は、ResultSetのカーソルを次の行へ進める処理です。次の行へ進めた場合は true、もう行がない場合は false になります。

図解:while (rs.next()) の判定
rs.next()
次の行へ進もうとする
true
次の行がある。while文の中を実行する。
false
次の行がない。while文を終了する。
rs.next() は、次の行へ進めたかどうかを true / false で返します。

そのため、検索結果を最後まで読むときは、次のように while 文と組み合わせます。

while (rs.next()) {
    int id = rs.getInt("id");
    String title = rs.getString("title");
    String artist = rs.getString("artist");

    System.out.println(title + " / " + artist);
}

このコードは、「次の行がある間だけ、現在行の値を取り出して表示する」と読めます。

getIntやgetStringは現在行から値を取り出す

rs.getInt("id")rs.getString("title") は、ResultSet全体から値を探す処理ではありません。カーソルが指している現在行から、指定した列の値を取り出します。

図解:現在行から列の値を取り出す
現在カーソルが指している行
列名
id
1
title
夜明けのビート
artist
スカイライン
↓ 列名を指定して取り出す
rs.getInt("id")
1 を取り出す
rs.getString("title")
夜明けのビート を取り出す
rs.getString("artist")
スカイライン を取り出す
getIntgetString は、ResultSet全体ではなく、現在カーソルが指している1行から値を取り出します。

よくある勘違い

  • executeQuery した直後に、すぐ1行目を読めるわけではありません。先に rs.next() が必要です。
  • rs.next() は、行があるかを確認するだけでなく、カーソルを次の行へ進めます。
  • getString("title") は、現在行の title 列を読む処理です。

確認問題

  1. executeQuery(sql) の戻り値は、どのような部品ですか。
  2. rs.next() は、ResultSetに対して何をする処理ですか。
  3. rs.getString("title") は、どの行の title を取り出しますか。

演習後の確認:こちらのページを使って、自分で考えた内容を見直せます。

あわせて読みたい関連記事

まとめ

ResultSet は、SELECT文の検索結果を受け取る部品です。検索結果を読むときは、rs.next() でカーソルを1行ずつ進め、現在行から getIntgetString で値を取り出します。まずは「nextで進む」「getで現在行を読む」という流れで理解しましょう。

info

シェアする