Qual è il modo migliore per ottenere l'ultimo ID inserito usando sqlite da Java?

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

  •  03-07-2019
  •  | 
  •  

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

È stato utile?

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();
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top