Curso de Java JDBC

JDBC ((Java DataBase Conectivity) es un conjunto de drivers y librerías que permiten conectar la tecnología Java con una base de datos.

Configuración inicial

Nesitaremos lo siguiente:

1. Instalar XAMPP.

2. Crear un proyecto Maven siguiendo estos pasos.

3. Descargar mysql workbench (este paso es opcional ya que podemos usar phpmyadmin).

4. Creamos una clase Main con el siguiente código:

try {
	Class.forName("com.mysql.cj.jdbc.Driver");
	// Define the data source for the driver
	String sourceURL = "jdbc:mysql://localhost/personas?useSSL=false&serverTimezone=UTC";
	// Create a connection through the DriverManager
	Connection databaseConnection = DriverManager.getConnection(sourceURL, "root", "");
	databaseConnection.close();
} catch (ClassNotFoundException | SQLException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
}

Si al ejecutar no se muestra ningún error en la consola, es que todo ha ido bien porque no ha habido errores.

Usando la clase Statement

Operaciones con tablas

Crear una tabla

Introducir las siguientes 3 líneas en el código anterior para que se cree una tabla en la base de datos seleccionada:

Statement statement = databaseConnection.createStatement();
statement.executeUpdate("CREATE TABLE nueva_tabla (dni VARCHAR(9) NOT NULL PRIMARY KEY, nombre VARCHAR(30))");
statement.close();

Borrar tabla

Teniendo en cuenta la siguiente sintaxis sql para borrar una tabla, utilizarla para borrar la tabla anterior:

DROP TABLE nueva_tabla;

Operaciones de modificación

Inserción

INSERT INTO table_name (column1,column2,column3,...) VALUES (value1,value2,value3,...);

Borrado

Añadir un método eliminarRegistro() que contiene el código necesario para eliminar una fila.

DELETE FROM persona WHERE dni='p'

Modificación

Añadir un método modificarRegistro() que contiene el código necesario para modificar una tabla.

El código sql sería parecido a este:

UPDATE persona SET nombre='juan', edad = 37 WHERE dni = 'u'

Consulta

Integrar el siguiente código en un nuevo .java para poder realizar una consulta en la base de datos.

List<Persona> personas = new ArrayList<>();

Statement statement = databaseConnection.createStatement();
ResultSet personasRS = statement.executeQuery("SELECT * FROM persona");

while (personasRS.next()){
   Persona p = new Persona();
   String nombre = personasRS.getString("nombre");
   p.setNombre(nombre);
   personas.add(p);
}
chiste de una select con SQL

PreparedStatement

Para sentencias de modificación (DML, data manipulation language)

Protege contra la inyección SQL. A partir de ahora, utilizaremos siempre preparedStatement.

PreparedStatement pstmt = null;
pstmt = databaseConnection.prepareStatement("INSERT INTO persona VALUES (?,?,?)");
pstmt.setString(1, "dni5");
pstmt.setString(2, "nombre1");
pstmt.setInt(3,9);
pstmt.execute();
pstmt.close();

Para sentencias de consulta

PreparedStatement pstmt = null;
pstmt = databaseConnection.prepareStatement("SELECT * FROM persona WHERE nombre = ?");
pstmt.setString(1, "Pablo");
ResultSet rs = pstmt.executeQuery();
// ...
pstmt.close();

Ejercicio

Crear usando el gestor de bases de datos una tabla llamada «prueba» e insertar mediante la consola (usando la clase BufferedReader) un registro de tres campos (dni, nombre y edad).

La aplicación consta de 4 clases: Main, Servicio, Conexion y Alumno.

La clase Alumno tendrá tres propiedades: nombre (String), edad (int) y dni (String).

La clase Servicio tendrá 4 métodos: insertar, eliminar, modificar y consultar.

La clase Conexion tendrá un método getDatabaseConnection que nos devolverá la conexión a la base de datos. Llamaremos a este método dentro de los cuatro métodos de la clase servicio para poder realizar las operaciones contra la base de datos

Al arrancar la aplicación desde el Main se nos preguntará por la operación que deseamos hacer:

  • Insertar un nuevo alumno. Esta opción nos solicita el nombre y la edad del alumno que queremos insertar y llamará a un método insertar de la clase Servicio.
  • Eliminar un alumno. Esta opción nos solicita el nombre del alumno que deseamos eliminar y llamará al método eliminar de la clase Servicio.
  • Modificar los datos de un alumno. Esta opción nos solicita primero el nombre de alumno para poder identificarlo y luego su nuevo nombre y edad. Finalmente, llamará al método modificar de la clase Servicio.
  • Mostrar todos los alumnos almacenados. Esta opción llama al método consultar de la clase Servicio que devolverá un ArrayList de alumnos.