Qual è il modo migliore per ottenere l'ultimo ID inserito usando sqlite da Java?
Domanda
Qual è il modo migliore per ottenere l'ultimo ID inserito usando sqlite da Java? Google mi sta dando risposte diverse - alcuni dicono di selezionare l'ultimo-insert-rowid; altri dicono call statement.getGeneratedKeys (). Qual è il percorso migliore da prendere? (Voglio solo restituire l'id, non usarlo per altri inserti o altro.)
Soluzione
Usa getGeneratedKeys ()
se il tuo driver JDBC lo supporta. Non vuoi andare in giro a cercare di procurarti la chiave dopo l'inserimento. Se il tuo driver non supporta getGeneratedKeys ()
, otterrei il valore successivo dalla chiave prima dell'inserimento.
Altri suggerimenti
Entrambi gli approcci eseguono la stessa esatta istruzione SQL, ma java.sql.Statement.getGeneratedKeys ()
è più portabile su diversi database sottostanti.
Uso della sqlite3_last_insert_rowid ()
funzione API C o la last_insert_rowid ()
la funzione SQL è il modo corretto di recuperare la rowid generato durante l'ultimo inserimento.
SQLite supporta la funzione scalare SQL sintassi come:
SELECT function-name();
Pertanto, se non si ha accesso diretto all'API C, è possibile richiamare la funzione scalare last_insert_rowid ()
tramite un'istruzione SELECT
.
Se guardi codice sorgente per l'implementazione di SQLiteJDBC (is questo che cosa stai usando?) vedrai che è esattamente ciò che l'autore di quel wrapper JDBC ha fatto:
ResultSet getGeneratedKeys() throws SQLException {
if (getGeneratedKeys == null) getGeneratedKeys = conn.prepareStatement(
"select last_insert_rowid();");
return getGeneratedKeys.executeQuery();
}