¿Cuál es la mejor manera de obtener la última identificación insertada usando sqlite de Java?

StackOverflow https://stackoverflow.com/questions/216790

  •  03-07-2019
  •  | 
  •  

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).

¿Fue útil?

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();
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top