wake-up-neo.com

Generierte ID nach dem Einfügen

Ich verwende die SQLite mit Android und möchte wissen, wie die generierte ID der von mir eingefügten Zeile am besten abgerufen werden kann.

Ich denke, eine Lösung macht eine Suche nach Include, aber es sieht nicht so aus, wie es aussieht.

129

Die insert -Methode gibt die id der gerade eingefügten Zeile zurück oder -1, wenn beim Einfügen ein Fehler aufgetreten ist.

long id = db.insert(...);

wobei db SQLiteDatabase ist.

256
GrAnd

Wenn Sie ContentValues ​​verwenden:

 DBHelper db =new DBHelper();// your dbHelper
 ContentValues values = new ContentValues();
  values.put("firstName","Ahmad");
 values.put("lastName","Aghazadeh");
 long insertedId= db.getSQLiteDatabase().insert("user", "", values) ;

Wenn Abfrage-Exec verwenden Sie select last_insert_rowid()

String sql = "INSERT INTO [user](firstName,lastName) VALUES (\"Ahmad\",\"Aghazadeh\"); select last_insert_rowid()";
 DBHelper itemType =new DBHelper();// your dbHelper
 c = db.rawQuery(sql, null);
 if (c.moveToFirst())
    result = c.getLong(0);

Wenn Raum verwenden

@Entity
class User {
    @PrimaryKey(autoGenerate = true)
    public int id;
    //...
}


@Dao
public interface UserDao{
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    long insert(User user);

    // Insert multiple users
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    long[] insert(User... user);
}
4
Ahmad Aghazadeh

Ich überprüfte die Quellen .insert Methode Verwenden Sie die sqlite3_last_insert_rowid Funktion, um eine id . Zurückzugeben. Entsprechend der Dokumentation: https://www.sqlite.org/c3ref/last_insert_rowid.html Die Zeile id ist die verborgene Spalte oder eine Spalte vom Typ INTEGER PRIMARY KEY, wenn sie deklariert ist.

Das ist normalerweise die Standard-Spalte _ID

3
Kirill Akhmetov

Ich hatte ziemlich viele Probleme damit unter mySQL. Die LAST_INSERT_ID ist keine zuverlässige Methode, um die ID zu erhalten. Wenn Benutzer die Datenbank hämmern, ist die zurückgegebene ID möglicherweise nicht die ID, die von der von Ihnen ausgeführten Abfrage eingefügt wurde Andere Benutzer können die Rückgabe dieser ID beeinflussen. Wir hatten Server mit durchschnittlich 7000 Benutzern, die eine Minute hämmerten, und es stolperte immer.

Die Lösung, die wir hatten, bestand darin, Daten aus der von Ihnen eingefügten Abfrage zu verwenden und dann mit diesen Daten nach diesem Ergebnis zu suchen. Sie suchen trotzdem nach der letzten ID. Sie können also genauso gut eine SELECT id FROM-Tabelle verwenden, bei der field = var und field = var die ID erhalten. Es war ein leichter Performance-Treffer für die Abfrage, aber ein viel zuverlässigeres Ergebnis wurde zurückgegeben.

1
PHPDev

Die letzte eingefügte Zeile _id kann einfach mit last_insert_rowid() abgerufen werden. Beispielcode ist wie folgt.

/**
 * Return Last inserted row id(auto incremented row) (_id)
 * @return
 */
public int getLastAddedRowId() {
    String queryLastRowInserted = "select last_insert_rowid()";

    final Cursor cursor = database.rawQuery(queryLastRowInserted, null);
    int _idLastInsertedRow = 0;
    if (cursor != null) {
        try {
            if (cursor.moveToFirst()) {
                _idLastInsertedRow = cursor.getInt(0);
            }
        } finally {
            cursor.close();
        }
    }

    return _idLastInsertedRow;

}
0
Rupesh Yadav