JSE con JDBC

JDBC (Java DataBase Conectivity)

Conjunto de drivers y librerías que permiten conectar la tecnología Java con una base de datos.

Conexión

Class.forName("com.mysql.jdbc.Driver");
// Define the data source for the driver
String sourceURL = "jdbc:mysql://localhost/personas";
// Create a connection through the DriverManager
Connection databaseConnection = DriverManager.getConnection(sourceURL, "root", "pp");
databaseConnection.close();

Operaciones SQL

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;

Inserción

Consulta de inserción en SQL

Hay 2 formas:

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

Ejercicio insertar registro I

Crear usando el gestor gráfico una tabla llamada "prueba" e insertar mediante la consola (usando la clase Scanner) un registro de tres campos (dni, nombre y edad).

Ejercicio insertar registro II

Crear una única clase java que contiene un método "public static void main" que realiza una inserción en la base de datos cuando se llama a un método insertaRegistro("dni3", "nombre3", 3) desde una instancia de la propia clase.

El public static void main quedaría así:

public class Mantenimiento 
	//Aquí viene el código que falta
	public static void main(String[] args) {		
		Mantenimiento mantenimiento = new Mantenimiento();
		mantenimiento.insertaRegistro("dni3", "nombre", 8);
	}
}

Ejercicio insertar registro III

Crear una única clase java que contiene un método "public static void main" que realiza una inserción en la base de datos cuando se llama a un método insertaRegistro("dni4", "nombre4", 4) desde una instancia de la propia clase.
Dicho método llamará en su primera línea al método getConnection(), que le devolverá una conexión a la base de datos.

El public static void main quedaría así:


public class Mantenimiento{
	public void insertar(String a, String b, int c){
		Connection conn = getConnection();
		//Aquí viene el código que falta
		conn.close();
		//Aquí viene el código que falta
	}
	public Connection getConnection(){
		//Aquí viene el código que falta
	}
	public static void main(String[] args) {		
		Mantenimiento mantenimiento = new Mantenimiento();
		mantenimiento.insertar("dni4", "nombre1", 8);
	}
}

Ejercicio eliminar registro

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

DELETE FROM persona WHERE dni='p'

Ejercicio modificar tabla I

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'

Consultar personas

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

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

Statement statement = databaseConnection.createStatement();
ResultSet personasRS = statement.executeQuery("SELECT * FROM persona");
while (personasRS.next()){
	personas.add(personasRS.getString("nombre"));
}
chiste de una select con SQL

Bean

Generación automática de los getters y setters:
Btn derecho sobre el código → source → Generate Getters and Setters
Alt + shift + s → Generate Getters and Setters
public class Persona {
	private String dni;
	private String nombre;
	private int edad;
	public String getDni() {
		return dni;
	}
	public void setDni(String dni) {
		this.dni = dni;
	}
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public int getEdad() {
		return edad;
	}
	public void setEdad(int edad) {
		this.edad = edad;
	}
}

Ejercicio Almacenar en una collection de Beans

El ejercicio consta de cuatro clases java:

  • Una clase que será nuestro bean Persona
  • Una clase Conexion con un método estático getConnection() que me devolverá la conexión a la base de datos.
  • Una clase Servicio que contendrá el método consultarTodo() que me devolverá una colección de Beans.
  • Una clase llamada Main con el siguiente código:
    public static void main(String[] args) {
    	Servicio servicio = new Servicio();
    	Collection <Persona> collection = servicio.consultarTodo();
    	Iterator<Persona> it = collection.iterator();
    	while(it.hasNext()){
    		Persona persona = it.next();
    		System.out.println(persona.getNombre());
    	}
    }

Prepared Statement

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

Ejercicio

Insertar valores en la tabla usando preparedStatement.

Prepared Statement II

PreparedStatement pstmt = null;
pstmt = databaseConnection.prepareStatement("SELECT * FROM persona where nombre = ?");
pstmt.setString(1, "Pablo");
ResultSet rs = pstmt.executeQuery();
while(rs.next()){
	System.out.println(rs.getString("direction"));
}
pstmt.close();

Ejercicio

Consultar un valor concreto de una tabla utilizando PreparedStatement.

icono de mandar un mail¡Contacta conmigo!
Pablo Monteserín
contacta conmigoPablo Monteserín

¡Hola! ¿En qué puedo ayudarte?