JavaのResultSetとは?SELECTの検索結果を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);
ここで大切なのは、rs がすぐに1行目のデータを指しているわけではないことです。最初の状態では、カーソルは検索結果の先頭行の手前にあります。
ボタンを押すたびに rs.next() が呼ばれ、カーソルが次の行へ進みます。行がある間だけ、while文の中で現在行の値を読み取ります。
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 になります。
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全体から値を探す処理ではありません。カーソルが指している現在行から、指定した列の値を取り出します。
getInt や getString は、ResultSet全体ではなく、現在カーソルが指している1行から値を取り出します。よくある勘違い
executeQueryした直後に、すぐ1行目を読めるわけではありません。先にrs.next()が必要です。rs.next()は、行があるかを確認するだけでなく、カーソルを次の行へ進めます。getString("title")は、現在行のtitle列を読む処理です。
確認問題
executeQuery(sql)の戻り値は、どのような部品ですか。rs.next()は、ResultSetに対して何をする処理ですか。rs.getString("title")は、どの行のtitleを取り出しますか。
演習後の確認:こちらのページを使って、自分で考えた内容を見直せます。
あわせて読みたい関連記事
- JavaのJDBCとは?Javaからデータベースを操作する基本の考え方
- Javaのwhile文とは?条件がtrueの間くり返す仕組みを初心者向けに解説
- Javaのtry-catchとは?例外が起きたときの処理の流れを理解する
まとめ
ResultSet は、SELECT文の検索結果を受け取る部品です。検索結果を読むときは、rs.next() でカーソルを1行ずつ進め、現在行から getInt や getString で値を取り出します。まずは「nextで進む」「getで現在行を読む」という流れで理解しましょう。