Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
CRUD operations | Basic Data Structures
Java Data Structures
course content

Зміст курсу

Java Data Structures

Java Data Structures

1. Basic Data Structures
2. Additional Data Structures
3. Map
4. enum & Stream API

CRUD operations

Basic Operations for a Database

In the previous chapter, you completed a fairly complex and interesting task on library management. You implemented methods for adding, retrieving, and removing elements from the list there. Did you know that such operations are essential for every list and application? These operations are referred to as CRUD operations!

CRUD stands for CREATE, READ, UPDATE, and DELETE, representing a list of operations to be performed on a database. In our case, in the previous task, the class Library served as our database, specifically the list of books. We wrote fundamental operations for working with this list, slightly customizing each of them. We created more focused methods for retrieving a book by author or obtaining a list of books published after a specific year.

Similar operations are employed in large applications to interact with databases. In the end, our application should:

  1. Be able to create data in the database;
  2. Be able to read data from the database;
  3. Be able to update specific data in the database;
  4. Be able to delete data from the database.

Note

Note that in our case, the database is represented by a data structure, a list, which currently serves as our workaround. In the future, instead of a simple list, we will use a database.

You may have noticed we didn't implement the update method in the previous task.

Let's do that now:

We first need to retrieve the book by ID to update an element by ID. For this, we will implement a method that fetches the book by ID. It's better to do it this way than to implement the logic of getting a book by its ID in the book update method, as we can reuse this method in other functions, making it more versatile.

java

Library

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

The solution above is a good option, but there is a small problem. We will get an error if such an ID does not exist in our list. We need to handle this error and display a message on the screen indicating that there is no such book in the list (database).

java

Library

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; }

We initially initialize the variable result as null in this solution. After implementing the book search by ID, we perform a check to see if our result is still null. If it's true, we create a new undefined book. Let's move on to implementing the update method:

java

Library

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 } } }

Great! We updated the book by updating all its parameters. I highly recommend doing it this way because if we simply reassign the book, unexpected errors may occur. This way, we update the book by ID, reassigning it to the parameters of the new book. Now, let's use the update method and see what happens:

java

main

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); } }

Now, the Library class has all CRUD operations.

You've done a great job if you grasped all of this. I recommend copying the methods I showed in this chapter and adding them to your code from the previous assignment, as this updated code will come in handy later.

1. What does the acronym **CRUD** mean?
2. Why is it necessary to implement CRUD operations in your code?
3. Can CRUD operations be used with databases?

What does the acronym CRUD mean?

Виберіть правильну відповідь

Why is it necessary to implement CRUD operations in your code?

Виберіть правильну відповідь

Can CRUD operations be used with databases?

Виберіть правильну відповідь

Все було зрозуміло?

Секція 1. Розділ 4
We're sorry to hear that something went wrong. What happened?
some-alt