Javaで検索結果をオブジェクトに詰める考え方|ResultSetからSongクラスへ移す流れ

本記事は、Schooの「Java入門 中級【2026年版】」第2回「データベース処理とオブジェクト設計の基礎」を学ぶ前後に、検索結果をJavaのオブジェクトとして扱う考え方を整理したい方向けの記事です。
JDBCでSELECTを実行すると、結果は ResultSet として受け取ります。ただし、実際のアプリでは、取得した値をその場で表示するだけでなく、Song のようなクラスのオブジェクトに移して扱うことがあります。
Schoo コースページ:Java入門 中級【2026年版】
検索結果をオブジェクトにするとはどういうことか
データベースの1行には、複数の列があります。たとえば曲データなら、id、title、artist のような列があります。
Java側にも、同じ情報を持つ Song クラスを用意しておくと、DBの1行をJavaの1つのデータとして扱いやすくなります。
public class Song {
private int id;
private String title;
private String artist;
}
ResultSetの値をsetterでSongにセットする
ResultSet から値を取り出すときは、列名を指定します。取り出した値を Song オブジェクトにセットすると、検索結果の1行をJavaのオブジェクトとして持てます。
if (rs.next()) {
Song song = new Song();
song.setId(rs.getInt("id"));
song.setTitle(rs.getString("title"));
song.setArtist(rs.getString("artist"));
return song;
}
rs.getInt("id") は、現在行の id 列の値を取り出します。rs.getString("title") は、現在行の title 列の値を取り出します。
その値を song.setId(...) や song.setTitle(...) に渡すことで、Song オブジェクトの中に値が入ります。
その場で表示するだけとの違い
SELECTした結果をすぐ画面に出すだけなら、System.out.println(rs.getString("title")) のように書くこともできます。
しかし、その書き方だと「表示する処理」と「DBから値を取り出す処理」が強く結びつきます。検索したデータを別のメソッドに渡したい、あとで加工したい、画面以外の場所で使いたい、というときに扱いにくくなります。
見つからなかった場合はnullを返すことがある
IDで1件検索するような処理では、該当するデータが見つからないこともあります。その場合、Song オブジェクトを作れないため、null を返す書き方があります。
if (rs.next()) {
Song song = new Song();
song.setId(rs.getInt("id"));
song.setTitle(rs.getString("title"));
song.setArtist(rs.getString("artist"));
return song;
}
return null;
この場合、呼び出し側では song != null を確認してから、song.getTitle() などを使います。
Song song = dao.findById(1);
if (song != null) {
System.out.println(song.getTitle());
} else {
System.out.println("該当する曲は見つかりませんでした。");
}
複数行を扱うならListに入れる
SELECTの結果が複数行ある場合は、1行ごとに Song オブジェクトを作り、それを List<Song> に追加する形がよく使われます。
List<Song> songs = new ArrayList<>();
while (rs.next()) {
Song song = new Song();
song.setId(rs.getInt("id"));
song.setTitle(rs.getString("title"));
song.setArtist(rs.getString("artist"));
songs.add(song);
}
この形にすると、検索結果をまとめて返したり、拡張for文で1件ずつ処理したりできます。
確認問題
次のコードは、ResultSet から値を取り出して Song オブジェクトに移す途中です。空欄に入る処理を考えてください。
if (rs.next()) {
Song song = new Song();
song.setId(rs.getInt("id"));
// titleをセットする
// artistをセットする
return song;
}
return null;
まとめ
- DBの1行は、Java側では1つのオブジェクトとして扱える
ResultSetの現在行から列の値を取り出し、オブジェクトのフィールドにセットする- 1件検索では、見つかったらオブジェクトを返し、見つからなければ
nullを返すことがある - 複数行を扱う場合は、1行ごとにオブジェクトを作って
Listに入れる