9.e.1 - Borrado y Modificación en Bases de Datos

Objetivo

Efectuar borrados y modificaciones sobre la información almacenada.

Contenidos

1. Idea general

Esto va a ser fácil: borrar y modificar se hacen igual que insertar: creas la sentencia preparada con SQL, enlazas los parámetros y la ejecutas.

RECUERDA: Para modificar una tupla de la base de datos necesitas conocer su identificador. Sin el filtro de la cláusula WHERE la operación se realizaría sobre TODAS las tuplas. No te olvides el WHERE en el DELETE FROM. (ni en el UPDATE)

2. Ejemplo

Escribe el código

Programamos una prueba de concepto para realizar las operaciones.


	import java.sql.Connection;
	import java.sql.DriverManager;
	import java.sql.PreparedStatement;
	import java.sql.SQLException;
	import java.sql.Statement;

	public class BorrarModificarAutor {

		public static void main(String[] args) {

			//1. Establecemos la URL de conexión con la base de datos
			String url = "jdbc:sqlite:autores.sqlite";

			//2. Definimos las sentencia SQL que queremos ejecutar.
			String sqlActualizar = "UPDATE Autor SET nombre = ?, nacionalidad = ? WHERE id = ?";
			String sqlEliminar = "DELETE FROM Autor WHERE id = ?";

			//3. Intentamos realizar la conexión en un "try con recursos"
			// En el mismo try, creamos las sentencias.
			try (Connection conexion = DriverManager.getConnection(url);
				 Statement sentencia = conexion.createStatement()) {

				//4. Establecemos el valor de los datos a insertar
				Integer[] ids = {1, 2};	//Asegúrate de tener estos ids en la tabla de Autores
				String[] nombres = {"Isaac Asimov", "J.R. Tolikien"};
				String[] nacionalidades = {"Estadounidense", "Británica"};

				//5. Intentamos preparar la sentencia.
				try (PreparedStatement ps = conexion.prepareStatement(sqlActualizar)) {

					//6. Asociamos los datos a los parámetros de la sentencia preparada
					for (int i = 0; i < ids.length; i++){
						ps.setString(1, nombres[i]);
						ps.setString(2, nacionalidades[i]);
						ps.setInt(3, ids[i]);

						//7. Ejecutamos la sentencia preparada
						ps.executeUpdate();

						System.out.println("Autor modificado correctamente.");
					}
				}
				//8. Intentamos preparar la sentencia de borrado.
				try (PreparedStatement ps = conexion.prepareStatement(sqlEliminar)) {

					//6. Asociamos los datos a los parámetros de la sentencia preparada
					for (int i = 0; i < ids.length; i++){
						ps.setInt(1, ids[i]);

						//7. Ejecutamos la sentencia preparada
						ps.executeUpdate();

						System.out.println("Autor eliminado correctamente.");
					}
				}

			} catch (SQLException e) {
				System.err.println("Error en la operación de base de datos:");
				System.err.println(e.getMessage());
			}
		}
	}				

				

Compila y Ejecuta

Ya sabes cómo... ¿no?

Debes ver en la consola los mensajes "Autor modificado correctamente." y "Autor eliminado correctamente" dos veces cada uno.

Compruébalo

Vuelve a insertar los autores y asegúrate de que tienen los identificadores del programa (o cámbialos en el programa). Luego comenta en el código las sentencias de borrado. Ejecuta el programa y comprueba que los autores se han modificado. Por último, descomenta las sentencias de borrado. Vuelve a compilar y ejecutar y comprueba que se han eliminado los autores.

2. Ejercicios

2.1 Insertar, Modificar y Eliminar Obras

Modifica el código del ejemplo para que también inserte, modifique y elimine obras. Para ello, define y llama a los siguientes métodos:


	private Boolean insertarObra(Integer idAutor, String titulo, Integer anoPublicacion);
	private Boolean modificarObra(Integer id, Integer idAutor, String titulo, Integer anoPublicacion);
	private Boolean eliminarObra(Integer id);
				

Reto

Vamos a hacerlo Orientado a Objetos.

Define las clases Autor y Obra siguiendo éste diagrama de clases:

Enlace a PlantUML.

Luego crea un programa (Programa.java) que cree al menos 3 autores con dos obras cada uno y los muestre por consola.

Bibliografía