Skip to content
Playground

演習: データの更新

データの更新とトランザクション で使った Spring Initializr のプロジェクトで取り組みます。各問題のコードは com.example パッケージの Main クラスの main メソッドに書き、main には throws SQLException を付けます。

  • Directoryjdbc-practice/
    • Directorysrc/main/java/com/example/

bookstore データベースに接続します。INSERT・UPDATE・DELETE は実行するたびに DB の中身が変わるため、各問題は一度実行して結果を確かめます。

books テーブルに書籍を 1 冊追加してください。isbntitleauthor_idcategory_idpricepublished_atstock をプレースホルダで設定し、executeUpdate で実行して、影響行数を出力します。idAUTO_INCREMENT なので指定しません。author_idcategory_id は、既存の値(どちらも 1 でよい)を指定します。

出力例:

追加した行数: 1
ヒント

SQL は INSERT INTO books (isbn, title, author_id, category_id, price, published_at, stock) VALUES (?, ?, ?, ?, ?, ?, ?) です。stmt.setStringstmt.setInt で 7 つの値を設定し、int rows = stmt.executeUpdate(); の戻り値が影響行数です。INSERT が成功すれば 1 が返ります。本文 INSERT と同じ構造です。isbn は重複しない 13 桁の値にします。

id = 1 の書籍(こころ)の価格を 500 に更新してください。UPDATE をプレースホルダで書き、executeUpdate の影響行数を出力します。

出力例:

更新した行数: 1

更新後、JDBC と検索 の SELECT で id = 1 の価格が 500 に変わったことを確認してください。

ヒント

SQL は UPDATE books SET price = ? WHERE id = ? です。stmt.setInt(1, 500) で価格、stmt.setInt(2, 1) で id を設定します。id = 1 の行が 1 つ更新されるので、影響行数は 1 です。

id = 2 の書籍(吾輩は猫である)の在庫を 1 減らしてください。現在の在庫を読み取ってから引くのではなく、UPDATE の中で stock = stock - 1 と書きます。影響行数を出力します。

出力例:

更新した行数: 1
ヒント

SQL は UPDATE books SET stock = stock - 1 WHERE id = ? です。stock - 1 は SQL の中で計算されるため、現在の在庫を Java 側で取得する必要はありません。stmt.setInt(1, 2) で id を設定します。

id = 999 の書籍の価格を更新する UPDATE を実行してください。id = 999 の書籍は存在しません。影響行数を確認し、0 のときは 対象の書籍が見つかりません と出力してください。

出力例:

対象の書籍が見つかりません
ヒント

SQL は 9-B と同じ UPDATE books SET price = ? WHERE id = ? で、id に 999 を渡します。該当する行がないため executeUpdate の影響行数は 0 です。if (rows == 0) で「見つからない」と判断します。影響行数を見れば、更新が実際に行われたかが分かります。

9-A で追加した書籍を、その isbn を指定して削除してください。DELETE をプレースホルダで書き、executeUpdate の影響行数を出力します。

出力例:

削除した行数: 1
ヒント

SQL は DELETE FROM books WHERE isbn = ? です。9-A で指定した isbnstmt.setString(1, ...) に渡します。該当する行が 1 つ削除されるので、影響行数は 1 です。9-A で追加したばかりの書籍は、ほかのテーブルから参照されていないため削除できます。

id = 999 の書籍を削除する DELETE を実行してください。該当する書籍は存在しません。影響行数を確認し、削除された件数を 削除した行数: ◯ の形式で出力してください。

出力例:

削除した行数: 0
ヒント

SQL は DELETE FROM books WHERE id = ? で、id に 999 を渡します。該当する行がないため影響行数は 0 です。DELETE も UPDATE と同じく、影響行数で「実際に削除されたか」を判断できます。