Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ JavaにおけるCRUD操作 | Javaの基本データ構造
Javaデータ構造

bookJavaにおけるCRUD操作

メニューを表示するにはスワイプしてください

データベースの基本操作

図書館管理の実践課題を完了し、リストへの追加取得削除の各要素に対するメソッドを実装しました。

これらの操作は、ほぼすべてのリストやアプリケーションにおいて基本的なものであり、CRUD操作として知られています。

CRUDは、CREATEREADUPDATEDELETEの略であり、データベースに対して実行される操作を表します。

前回の課題では、クラスLibraryデータベース、特に書籍のリストとして機能しました。このリストを操作するための基本的な操作を実装し、それぞれを少しカスタマイズしました。たとえば、著者で本を取得する、または特定の年以降に出版された本のリストを取得するなど、より特化したメソッドを作成しました。

同様の操作は、大規模なアプリケーションでもデータベースとやり取りするために利用されます。最終的に、アプリケーションは次のことができる必要があります:

  1. データベースにデータを作成できること;
  2. データベースからデータを読み取ることができること;
  3. データベース内の特定のデータを更新できること;
  4. データベースからデータを削除できること。

前回の課題で更新メソッドを実装していなかったことに気付いたかもしれません。

これから実装してみましょう:

IDで要素を更新するには、まずIDで本を取得する必要があります。そのために、IDで本を取得するメソッドを実装します。この方法の方が、本の更新メソッド内でIDで本を取得するロジックを実装するよりも良いです。このメソッドは他の関数でも再利用でき、より汎用的になります。

Library.java

Library.java

copy
123456789
public Book findBookById(int id) { Book result; for (Book book : books) { if (book.getId() == id){ result = book; } } return result; }

上記の解決策は良い選択肢ですが、小さな問題があります。リストにそのようなIDが存在しない場合、エラーが発生します。このエラーを処理し、リスト(データベース)にそのような本が存在しないことを画面に表示するメッセージを出す必要があります。

Library.java

Library.java

copy
123456789101112
public Book findBookById(int id) { Book result = null; for (Book book : books) { if (book.getId() == id){ result = book; } } if (result == null) { result = new Book("Unknown", "Unknown", 0); } return result; }

この解決策では、最初に変数 resultnull で初期化します。IDによる書籍検索を実装した後、result がまだ null かどうかを確認します。もし true であれば、新しい未定義の書籍を作成します。 次に、update メソッドの実装に進みます。

Library.java

Library.java

copy
123456789101112
public void updateBookById(int id, Book newBook) { Book bookToBeUpdated = findBookById(id); for (Book book : books) { if (book.getId().equals(bookToBeUpdated.getId())) { book.setId(newBook.getId()); book.setAuthor(newBook.getAuthor()); book.setTitle(newBook.getTitle()); book.setYear(newBook.getYear()); return; // Ending loop execution, because update operation has executed successfully } } }

すべてのパラメータを更新することで書籍を更新しました。 この方法を強く推奨します。なぜなら、単純に書籍を再代入すると予期しないエラーが発生する可能性があるからです。 この方法では、ID で書籍を更新し、新しい書籍のパラメータに再代入します。

それでは、update メソッドを使って何が起こるか見てみましょう。

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
package com.example; import java.util.ArrayList; import java.util.List; class Main { public static void main(String[] args) { Library library = new Library(); library.addBook(new Book("Java: The Complete Reference", "Herbert Schildt", 2019)); library.addBook(new Book("Effective Java", "Joshua Bloch", 2020)); library.addBook(new Book("Clean Code", "Robert C. Martin", 2008)); System.out.println("All books in the library:"); library.displayAllBooks(); Book newBook = new Book("Head First Java", "Katy Siera", 2022); library.updateBookById(2, newBook); System.out.println("\nAll books after using update method"); library.displayAllBooks(); } } class Book { private static Long nextId = 1L; private String title; private String author; private int year; private Long id; public Book(String title, String author, int year) { this.title = title; this.author = author; this.year = year; this.id = nextId++; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public Long getId() { return id; } public void setId(Long id) { this.id = id; } @Override public String toString() { return "Book{" + "title='" + title + '\'' + ", author='" + author + '\'' + ", year=" + year + ", id=" + id + '}'; } } class Library { public List<Book> books = new ArrayList<>(); public void addBook(Book book) { books.add(book); } public void removeBookById(int id) { List<Book> booksToRemove = new ArrayList<>(); for (Book book : books) { if (book.getId() == id) { booksToRemove.add(book); } } books.removeAll(booksToRemove); } public List<Book> findBooksByAuthor(String author) { List<Book> booksWithSpecifiedAuthor = new ArrayList<>(); for (Book book : books) { if (book.getAuthor().equals(author)) { booksWithSpecifiedAuthor.add(book); } } return booksWithSpecifiedAuthor; } public List<Book> findBooksPublishedAfterYear(int year) { List<Book> booksPublishedAfterYear = new ArrayList<>(); for (Book book : books) { if (book.getYear() > year){ booksPublishedAfterYear.add(book); } } return booksPublishedAfterYear; } public Book findBookById(int id) { Book result = null; for (Book book : books) { if (book.getId() == id){ result = book; } } if (result == null) { result = new Book("Unknown", "Unknown", 0); } return result; } public void updateBookById(int id, Book newBook) { Book bookToBeUpdated = findBookById(id); for (Book book : books) { if (book.getId().equals(bookToBeUpdated.getId())) { book.setId(newBook.getId()); book.setAuthor(newBook.getAuthor()); book.setTitle(newBook.getTitle()); book.setYear(newBook.getYear()); return; // Ending loop execution, because update operation has executed successfully } } } public void displayAllBooks() { System.out.println(books); } }

これで、Library クラスにはすべての CRUD 操作が含まれています。

この章で紹介したメソッドをコピーして、前回の課題で作成したコードに追加することをおすすめします。更新されたこのコードは、今後役立ちます。

1. CRUD の略語は何を意味しますか?

2. なぜコード内でCRUD操作を実装する必要があるのか?

3. CRUD操作はデータベースで使用できるか?

question mark

CRUD の略語は何を意味しますか?

正しい答えを選んでください

question mark

なぜコード内でCRUD操作を実装する必要があるのか?

正しい答えを選んでください

question mark

CRUD操作はデータベースで使用できるか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 1.  4

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 1.  4
some-alt