Altas, bajas y modificaciones de información
Lo primero obtenemos un objeto Statement a partir de Connection:
try (Statement stmt = con.createStatement()) {
// use stmt here
}
El Statement tiene tres métodos para ejecutar:
- executeQuery(): para SELECT instrucciones. Visto en el anterior ejercicio.
- executeUpdate(): para actualizar información o estructura de base de datos.
- execute(): se puede usar para ambos casos. Más utilizada para crear o eliminar estructura de base de datos
Actualización de información
Respecto a las consultas de actualización, con un objeto de Connection tenemos el método executeUpdate(), retornan el número de registros insertados, registros actualizados o eliminados, dependiendo del tipo de consulta que se trate. Supongamos que tenemos varios registros en la tabla Cliente, de una base de datos. Si quisiéramos actualizar el teléfono del tercer registro, que tiene idCLIENTE=3 y ponerle como nuevo teléfono el 968610009 tendríamos que hacer:
String connectionUrl = "jdbc:mysql://localhost/notarbd?" + "user=root&password=admin";
// Obtener la conexión
Connection con = DriverManager.getConnection(connectionUrl);
// Preparamos la consulta y la ejecutamos
Statement s = con.createStatement();
int registros_afectados = s.executeUpdate("UPDATE CLIENTE SET teléfono='968610009' WHERE idCLIENTE=3");
// Cerramos la conexión a la base de datos.
con.close();
Creación
String tableSql = "CREATE TABLE IF NOT EXISTS employees"
+ "(emp_id int PRIMARY KEY AUTO_INCREMENT, name varchar(30),"
+ "position varchar(30), salary double)";
stmt.execute(tableSql);
Inserciones de información
Usamos excuteUpdate():
Statement s = con.createStatement();
s.executeUpdate( "INSERT INTO CLIENTE" +
" (idCLIENTE, NIF, NOMBRE, APELLIDOS, DIRECCIÓN, CPOSTAL, TELÉFONO, CORREOELEC)" + " VALUES (4, '66778998T', 'Alfredo', 'Gates Gates', 'C/
Pirata 23','20400', '891222112', 'prueba@eresmas.es' )") ;
Borrado de información
Lo mismo:
Statement s = con.createStatement();
numReg = s.executeUpdate( "DELETE FROM CLIENTE WHERE NIF= '66778998T' " );
// Informamos del número de registros borrados
System.out.println ("\nSe borró " + numReg + " registro\n") ;
Nota: Si usamos execute en vez de executeUpdate, tenemos un método que nos devuelve el número de filas afectadas tras la ejecución de la sentencia sql: stmt.getUpdateCount()
PreparedStatement
En este tipo de sentencias sql también necesitamos parámetros de entrada y se trabaja de la misma forma que lo explicado en el anterior recurso
Autoguardado
Por defecto en MariaDB cualquier operación que implica alta, baja o modificación de datos tiene el autoguardado activo (autocommit true). Es decir se ejecuta la sentencia SQL y se guardan los cambios. Pero a veces nos interesa que no se así. Por ejemplo operaciones sobre la base de datos de todas o ninguna, se llaman transaciones. Si tenemos dudas de que valor está la variable autocommit podemos asignarla a verdadero:
connection.setAutoCommit(true);
Si desabilitamos el autoguardado luego podemos ejecutar el método commit para forzar el guardado de operaciones:
connection.setAutoCommit(false);
// ejecutamos las sentencias importantes ....
connection.commit();
Ejercicio 1
Partiendo del Pojo:
public class Person {
private Integer id;
private String name;
private String lastName;
private Integer age;
// standard constructor, getters, and setters
}
Desarrolla estas funcionalidades a partir de la interface:
public interface IPerson {
public Connection openConnection() throws SQLException;
public int insertPerson(Connection connection, Person person) throws SQLException;
public void updatePersonAgeById(Connection connection, int id, int newAge) throws SQLException;
public List selectAllPeople(Connection connection) throws SQLException;
public int deletePerson(Connection connection, int id) throws SQLException;
public Person maxAgePerson(Connection connection) throws SQLException;
}