Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Operaciones CRUD | Estructuras Básicas de Datos
Estructuras de Datos en Java

bookOperaciones CRUD

Operaciones básicas de una base de datos

En el capítulo anterior, realizaste una tarea bastante compleja e interesante sobre gestión de bibliotecas. Allí implementaste métodos para añadir, recuperar y eliminar elementos de la lista. ¿Sabías que estas operaciones son esenciales para cualquier lista y aplicación? Estas operaciones se denominan operaciones CRUD.

CRUD son las siglas de CREATE, READ, UPDATE y DELETE, que representan una lista de operaciones a realizar sobre una base de datos. En nuestro caso, en la tarea anterior, la clase Library sirvió como nuestra base de datos, específicamente la lista de libros. Escribimos las operaciones fundamentales para trabajar con esta lista, personalizando ligeramente cada una de ellas. Creamos métodos más específicos para recuperar un libro por autor u obtener una lista de libros publicados a partir de un año concreto.

Operaciones similares se emplean en grandes aplicaciones para interactuar con bases de datos. Al final, nuestra aplicación debería:

  1. Ser capaz de crear datos en la base de datos.
  2. Ser capaz de leer datos de la base de datos.
  3. Ser capaz de actualizar datos específicos en la base de datos.
    1. Ser capaz de borrar datos de la base de datos.

Nota

Observa que en nuestro caso, la base de datos está representada por una estructura de datos, una lista, que actualmente nos sirve como solución. En el futuro, en lugar de una simple lista, utilizaremos una base de datos.

Habrás notado que no implementamos el método actualizar en la tarea anterior.

Vamos a hacerlo ahora:

Primero necesitamos obtener el libro por ID** para actualizar un elemento por ID. Para ello, implementaremos un método que recupere el libro por ID. Es mejor hacerlo así que implementar la lógica de obtener un libro por su ID en el método de actualización del libro, ya que podemos reutilizar este método en otras funciones, haciéndolo más versátil.

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

La solución anterior es una buena opción, pero hay un pequeño problema. Obtendremos un error si tal ID no existe en nuestra lista. Necesitamos manejar este error y mostrar un mensaje en pantalla indicando que no existe tal libro en la lista (base de datos).

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

Inicialmente inicializamos la variable resultado como nulo en esta solución. Después de implementar la búsqueda de libros por ID, realizamos una comprobación para ver si nuestro resultado sigue siendo nulo. Si es true, creamos un nuevo libro indefinido. Pasemos a implementar el método de actualización:

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

Estupendo. Actualizamos el libro actualizando todos sus parámetros. Recomiendo hacerlo de esta forma porque si simplemente reasignamos el libro, pueden producirse errores inesperados. De esta forma, actualizamos el libro por ID, reasignándolo a los parámetros del nuevo libro. Ahora, usemos el método update y veamos qué ocurre:

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

Ahora, la clase Library tiene todas las operaciones CRUD.

Has hecho un gran trabajo si has comprendido todo esto. Te recomiendo que copies los métodos que he mostrado en este capítulo y los añadas a tu código de la tarea anterior, ya que este código actualizado te será útil más adelante.

1. ¿Qué significa la sigla CRUD?

2. ¿Por qué es necesario implementar operaciones CRUD en tu código?

3. ¿Se pueden utilizar operaciones CRUD con bases de datos?

question mark

¿Qué significa la sigla CRUD?

Select the correct answer

question mark

¿Por qué es necesario implementar operaciones CRUD en tu código?

Select the correct answer

question mark

¿Se pueden utilizar operaciones CRUD con bases de datos?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 4

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Suggested prompts:

Can you explain more about how to implement the update method?

What should I do if the book ID does not exist in the list?

Can you show an example of how to use the update method in practice?

Awesome!

Completion rate improved to 4

bookOperaciones CRUD

Desliza para mostrar el menú

Operaciones básicas de una base de datos

En el capítulo anterior, realizaste una tarea bastante compleja e interesante sobre gestión de bibliotecas. Allí implementaste métodos para añadir, recuperar y eliminar elementos de la lista. ¿Sabías que estas operaciones son esenciales para cualquier lista y aplicación? Estas operaciones se denominan operaciones CRUD.

CRUD son las siglas de CREATE, READ, UPDATE y DELETE, que representan una lista de operaciones a realizar sobre una base de datos. En nuestro caso, en la tarea anterior, la clase Library sirvió como nuestra base de datos, específicamente la lista de libros. Escribimos las operaciones fundamentales para trabajar con esta lista, personalizando ligeramente cada una de ellas. Creamos métodos más específicos para recuperar un libro por autor u obtener una lista de libros publicados a partir de un año concreto.

Operaciones similares se emplean en grandes aplicaciones para interactuar con bases de datos. Al final, nuestra aplicación debería:

  1. Ser capaz de crear datos en la base de datos.
  2. Ser capaz de leer datos de la base de datos.
  3. Ser capaz de actualizar datos específicos en la base de datos.
    1. Ser capaz de borrar datos de la base de datos.

Nota

Observa que en nuestro caso, la base de datos está representada por una estructura de datos, una lista, que actualmente nos sirve como solución. En el futuro, en lugar de una simple lista, utilizaremos una base de datos.

Habrás notado que no implementamos el método actualizar en la tarea anterior.

Vamos a hacerlo ahora:

Primero necesitamos obtener el libro por ID** para actualizar un elemento por ID. Para ello, implementaremos un método que recupere el libro por ID. Es mejor hacerlo así que implementar la lógica de obtener un libro por su ID en el método de actualización del libro, ya que podemos reutilizar este método en otras funciones, haciéndolo más versátil.

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

La solución anterior es una buena opción, pero hay un pequeño problema. Obtendremos un error si tal ID no existe en nuestra lista. Necesitamos manejar este error y mostrar un mensaje en pantalla indicando que no existe tal libro en la lista (base de datos).

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

Inicialmente inicializamos la variable resultado como nulo en esta solución. Después de implementar la búsqueda de libros por ID, realizamos una comprobación para ver si nuestro resultado sigue siendo nulo. Si es true, creamos un nuevo libro indefinido. Pasemos a implementar el método de actualización:

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

Estupendo. Actualizamos el libro actualizando todos sus parámetros. Recomiendo hacerlo de esta forma porque si simplemente reasignamos el libro, pueden producirse errores inesperados. De esta forma, actualizamos el libro por ID, reasignándolo a los parámetros del nuevo libro. Ahora, usemos el método update y veamos qué ocurre:

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

Ahora, la clase Library tiene todas las operaciones CRUD.

Has hecho un gran trabajo si has comprendido todo esto. Te recomiendo que copies los métodos que he mostrado en este capítulo y los añadas a tu código de la tarea anterior, ya que este código actualizado te será útil más adelante.

1. ¿Qué significa la sigla CRUD?

2. ¿Por qué es necesario implementar operaciones CRUD en tu código?

3. ¿Se pueden utilizar operaciones CRUD con bases de datos?

question mark

¿Qué significa la sigla CRUD?

Select the correct answer

question mark

¿Por qué es necesario implementar operaciones CRUD en tu código?

Select the correct answer

question mark

¿Se pueden utilizar operaciones CRUD con bases de datos?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 4
some-alt