Frage

Was ist der beste Weg, die letzte Eingabe-ID mit SQLite von Java zu bekommen? Google wird mir verschiedene Antworten geben - manche sagen, wählen Sie die letzte-Insert-Rowid; andere sagen Anruf Statement.getGeneratedKeys (). Was ist der beste Weg zu nehmen? (Ich möchte nur die ID zurückzukehren, ist es nicht für andere Einsätze oder irgendetwas verwendet werden.)

War es hilfreich?

Lösung

Verwenden Sie getGeneratedKeys() wenn Ihr JDBC-Treiber unterstützt wird. Sie wollen nicht den Schlüssel selbst nach dem Einsatz zu bekommen versuchen vertrödeln. Wenn der Treiber nicht unterstützt getGeneratedKeys() dann würde ich den nächsten Wert aus dem Schlüssel vor dem Einsatz bekommen.

Andere Tipps

Jeder Ansatz führt genau die gleiche SQL-Anweisung, aber java.sql.Statement.getGeneratedKeys() ist mehr tragbar zu verschiedenen zugrunde liegenden Datenbanken.

entweder mit der sqlite3_last_insert_rowid() C-API-Funktion oder den last_insert_rowid() SQL-Funktion ist der richtige Weg, um die rowid erzeugt während des letzten Einsatzes abgerufen werden.

SQLite unterstützt die SQL Skalarfunktion Syntax wie:

SELECT function-name();

Wenn Sie also nicht direkt Zugriff auf die C-API haben, können Sie die Skalarfunktion last_insert_rowid() über eine SELECT Anweisung aufrufen.

Wenn man sich die Quellcode für die SQLiteJDBC Implementierung (ist das, was Sie verwenden) Sie werden sehen, dass dies genau das, was der Autor dieses JDBC-Wrapper getan hat:

ResultSet getGeneratedKeys() throws SQLException {
    if (getGeneratedKeys == null) getGeneratedKeys = conn.prepareStatement(
        "select last_insert_rowid();");
    return getGeneratedKeys.executeQuery();
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top