JavaのDAOでデータを追加・更新・削除するには?処理をメソッドに分ける考え方

最終更新日

Schoo Java入門 中級 第2回 データベース処理とオブジェクト設計

本記事は、Schooの「Java入門 中級【2026年版】」第2回「データベース処理とオブジェクト設計の基礎」を学ぶ前後に、DAOでデータの追加・更新・削除を扱う考え方を整理したい方向けの記事です。

DAOは、検索だけを担当するクラスではありません。曲を追加する、曲名を更新する、不要な曲を削除する、といったデータ変更の処理もDAOにまとめられます。

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

DAOは検索だけでなくデータ変更も担当できる

これまでのDAOでは、findById()findAll() のように、データベースからデータを探す処理を扱いました。

実際のアプリケーションでは、読むだけでなく、新しく登録する、内容を書き換える、削除する処理も必要になります。そのときも、main側にSQLを直接書くのではなく、DAOのメソッドとして整理します。

図解:mainはDAOに依頼し、DAOがDBを変更する
main側
dao.insert(song);
dao.update(song);
dao.delete(id);
SongDao
追加なら INSERT
更新なら UPDATE
削除なら DELETE
songsテーブル
行が追加される
値が書き換わる
行が削除される
呼び出し側は操作したい内容をDAOに依頼し、DAOの中で目的に合ったSQLを実行します。

追加・更新・削除は別々のメソッドにする

データ変更の処理は、目的ごとにメソッドを分けると読みやすくなります。

SongDao dao = new SongDao();

dao.insert(song);
dao.update(song);
dao.delete(song.getId());

このように書けると、呼び出し側では「登録する」「更新する」「削除する」という目的がそのまま読めます。SQLの細かい内容はDAOの中に置きます。

図解:操作ごとにDAOメソッドを分ける
呼び出すメソッド
DAO内のSQL
読み方
insert(song)
INSERT
この曲を新しく登録する
update(song)
UPDATE
この曲の内容を書き換える
delete(id)
DELETE
このIDの曲を削除する
SQLの種類ごとにメソッドを分けると、main側から見たときに目的が読み取りやすくなります。

insertメソッドは1件追加する処理

insert() は、新しい行をテーブルに追加する処理です。登録したい値を Song オブジェクトとして受け取り、DAOの中で INSERT を実行します。

public int insert(Song song) {
    String sql = "INSERT INTO songs (id, title, artist) VALUES (?, ?, ?)";

    pstmt.setInt(1, song.getId());
    pstmt.setString(2, song.getTitle());
    pstmt.setString(3, song.getArtist());

    return pstmt.executeUpdate();
}

main側は、追加したい曲を Song に入れてDAOへ渡します。DAOは、その値をSQLにセットしてDBに登録します。

updateメソッドは既存データを書き換える処理

update() は、すでにある行の値を書き換える処理です。どの行を更新するかを決めるために、通常は WHERE id = ? のような条件を付けます。

public int update(Song song) {
    String sql = "UPDATE songs SET title = ?, artist = ? WHERE id = ?";

    pstmt.setString(1, song.getTitle());
    pstmt.setString(2, song.getArtist());
    pstmt.setInt(3, song.getId());

    return pstmt.executeUpdate();
}

WHERE を付けないと、対象を絞れず、意図しない行まで更新してしまう危険があります。更新処理では「どの行を変えるのか」を必ず意識します。

deleteメソッドは指定したデータを削除する処理

delete() は、指定した行を削除する処理です。削除では、Song 全体ではなくIDだけを受け取る形にすることもあります。

public int delete(int id) {
    String sql = "DELETE FROM songs WHERE id = ?";

    pstmt.setInt(1, id);

    return pstmt.executeUpdate();
}

削除も更新と同じく、WHERE で対象を絞ることが重要です。delete(11) と書かれていれば、「IDが11の曲を削除する」と読み取れます。

戻り値のintは処理された件数

INSERTUPDATEDELETE では、executeUpdate() の戻り値として処理された件数を受け取れます。

int insertCount = dao.insert(song);
int updateCount = dao.update(song);
int deleteCount = dao.delete(song.getId());

戻り値が 1 なら1件処理されたと考えられます。戻り値が 0 の場合は、更新や削除の対象が見つからなかった可能性があります。

図解:戻り値のintは処理された件数
戻り値が 1
1件
対象の行が1件追加・更新・削除された
戻り値が 0
0件
条件に合う行がなく、変更されなかった可能性がある
executeUpdate() の戻り値は、データベース上で変更された行数として受け取れます。

確認問題

次の日本語の要件に合うDAOメソッドを考えてください。

  1. 新しい曲をsongsテーブルに登録したい
  2. IDが11の曲名とアーティスト名を書き換えたい
  3. IDが11の曲を削除したい
  4. 更新処理の戻り値が0だった場合、何が考えられるか

確認問題の回答例を見る

まとめ

  • DAOは検索だけでなく、追加・更新・削除の処理も担当できる
  • insert()update()delete() のように目的ごとにメソッドを分ける
  • main側はSQLではなく、DAOのメソッド名で処理の目的を読める
  • executeUpdate() の戻り値は、処理された件数として確認できる

関連する記事

シェアする