¿Cuál es la mejor manera de obtener la última identificación insertada usando sqlite de Java?
Pregunta
¿Cuál es la mejor manera de obtener la última identificación insertada usando sqlite desde Java? Google me está dando respuestas diferentes; algunos dicen que seleccionó el último inserto-rowid; otros dicen call statement.getGeneratedKeys (). ¿Cuál es la mejor ruta a tomar? (Solo quiero devolver el ID, no usarlo para otras inserciones ni nada).
Solución
Use getGeneratedKeys ()
si su controlador JDBC lo admite. No querrás andar por ahí intentando obtener la llave después del inserto. Si su controlador no admite getGeneratedKeys ()
, obtendré el siguiente valor de la clave antes de la inserción.
Otros consejos
Cualquier enfoque ejecuta la misma instrucción SQL exacta, pero java.sql.Statement.getGeneratedKeys ()
es más portátil a diferentes bases de datos subyacentes.
Utilizando la sqlite3_last_insert_rowid ()
función de la API de C o la función SQL last_insert_rowid ()
es la forma correcta de recuperar la Rowid generado durante la última inserción.
SQLite admite la sintaxis de función escalar de SQL como:
SELECT function-name();
Por lo tanto, si no tiene acceso directo a la API de C, puede invocar la función escalar last_insert_rowid ()
a través de una declaración SELECT
.
Si observa código fuente para la implementación SQLiteJDBC (es esto es lo que está usando?) verá que esto es exactamente lo que ha hecho el autor de ese contenedor JDBC:
ResultSet getGeneratedKeys() throws SQLException {
if (getGeneratedKeys == null) getGeneratedKeys = conn.prepareStatement(
"select last_insert_rowid();");
return getGeneratedKeys.executeQuery();
}