parametros - preparedstatement java select
Java PreparedStatement recuperando el Ășltimo ID insertado (3)
Si no puede usar RETURN_GENERATED_KEYS
, use otra declaración (una consulta esta vez) para hacer
SELECT last_insert_id()
Asegúrese de que definitivamente tiene una columna de clave primaria de incremento automático en esa tabla.
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo obtener el ID de inserción en JDBC? 9 respuestas
Esta respuesta a esta pregunta hecha de esta manera parece ser muy difícil de encontrar en Internet. Básicamente estoy insertando valores en una base de datos MySQL usando PreparedStatement. Uso PreparedStatement para escapar de los datos y evitar los ataques de inyección SQL. El problema es que ahora hay retreving esas llaves.
String query="Insert INTO Table_A(name, age) (?, ?)";
//String query="Insert INTO Table_A(name, age) (''abc'',''123'' )";//Doesn''t escape
PreparedStatement prest;
prest = con.prepareStatement(query);
prest.setString(1,"abc");
prest.setInt(2,123);
prest.executeUpdate();
//prest.executeUpdate(query, PreparedStatement.RETURN_GENERATED_KEYS); Throws an error
//prest.executeQuery(); Throws an error
Entonces, ¿cómo puedo escapar de la entrada y usar PreparedStatements en Java?
Use java.sql.ResultSet java.sql.Statement.getGeneratedKeys () para recuperar las claves generadas.
aprueba Statement.RETURN_GENERATED_KEYS
en prepareStatement()
junto con tu consulta. Y luego use getGeneratedKeys () de PreparedStatement
para obtener el ResultSet que contiene su auto_incremented_id insertado.
String query="Insert INTO Table_A(name, age) (?, ?)";
//String query="Insert INTO Table_A(name, age) (''abc'',''123'' )";//Doesn''t escape
PreparedStatement prest;
prest = con.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
prest.setString(1,"abc");
prest.setInt(2,123);
prest.executeUpdate();
//prest.executeUpdate(query, PreparedStatement.RETURN_GENERATED_KEYS); Throws an error
//prest.executeQuery(); Throws an error
ResultSet rs = prest.getGeneratedKeys();
if(rs.next())
{
int last_inserted_id = rs.getInt(1);
}