Ich habe über Spezifikationen gelesen. "Rückgabe: Die Zeilen-ID der neu eingefügten Zeile oder -1, wenn ein Fehler aufgetreten ist." Die Zeilen-ID entspricht meinem generierten Feld "ID-Primärschlüssel-Autoinkrementierung".
Marcos Vasconcelos
29
Ja, es ist das gleiche.
GrAnd
3
@GrAnd, aber was ist, wenn ich einige "Start-Mitte" -Zeilen in meiner Tabelle lösche, so dass ich die Sequenz der n-ten Zeilen mit der generierten ID = n unterbreche. Bleibt diese zurückgegebene Zeilen-ID dieselbe wie die generierte Autoincrement-ID?
UnbekanntJoe
1
Was ist, wenn Sie INSERT OR UPDATE ausführen und die ID erhalten müssen?
Timo
1
@UnknownJoe Ich weiß, das ist ein alter Beitrag. Kann aber für jemanden hilfreich sein. Die Zeilen-ID und die automatisch inkrementierte ID sind auch dann identisch, wenn sie aus der Mitte gelöscht werden.
Raj kannan Iyyappan
8
Wenn Sie ContentValues verwenden:
DBHelper db =newDBHelper();// your dbHelperContentValues values =newContentValues();
values.put("firstName","Ahmad");
values.put("lastName","Aghazadeh");long insertedId= db.getSQLiteDatabase().insert("user","", values);
Wenn Query Exec verwenden select last_insert_rowid()
String sql ="INSERT INTO [user](firstName,lastName) VALUES (\"Ahmad\",\"Aghazadeh\"); select last_insert_rowid()";DBHelper itemType =newDBHelper();// your dbHelper
c = db.rawQuery(sql,null);if(c.moveToFirst())
result = c.getLong(0);
Ich habe die Quellen überprüft.
insertMethode Verwenden Sie die sqlite3_last_insert_rowidFunktion, um eine ID zurückzugeben. Gemäß der Dokumentation: https://www.sqlite.org/c3ref/last_insert_rowid.html
Die Zeilen-ID ist die ausgeblendete Spalte oder eine Spalte vom Typ, INTEGER PRIMARY KEYwenn sie deklariert ist.
Jeder Eintrag in den meisten SQLite Tabellen ( mit Ausnahme der WITHOUT ROWIDTabellen) hat eine eindeutige 64-Bit - Integer unterzeichnet Schlüssel der „genannt Rowid “. Die Zeilen-ID ist immer als nicht deklarierte Spalte mit dem Namen ROWID, OID oder _ROWID_ verfügbar, solange diese Namen nicht auch von explizit deklarierten Spalten verwendet werden. Wenn die Tabelle eine Spalte vom TypINTEGER PRIMARY KEY hat, ist diese Spalte ein weiterer Alias für die Zeilen-ID .
Ich hatte unter mySQL einige Probleme damit. Die LAST_INSERT_ID ist kein zuverlässiger Weg, um die ID abzurufen. 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 sich auf die Rückgabe dieser ID auswirken. Wir hatten einen Server mit durchschnittlich 7000 Benutzern pro Minute und er stolperte immer.
Die Lösung bestand darin, Daten aus der von Ihnen eingefügten Abfrage zu verwenden und dann anhand dieser Daten nach diesem Ergebnis zu suchen. Sie machen eine Anfrage und suchen trotzdem nach der letzten ID. Sie können also auch eine SELECT id FROM-Tabelle erstellen, in der field = var und field = var, um die ID abzurufen. Es ist ein leichter Leistungseinbruch bei der Abfrage, aber ein viel zuverlässigeres Ergebnis wird zurückgegeben.
Wenn Sie ContentValues verwenden:
Wenn Query Exec verwenden
select last_insert_rowid()
Wenn Raum verwenden
quelle
Ich habe die Quellen überprüft.
insert
Methode Verwenden Sie diesqlite3_last_insert_rowid
Funktion, um eine ID zurückzugeben. Gemäß der Dokumentation: https://www.sqlite.org/c3ref/last_insert_rowid.html Die Zeilen-ID ist die ausgeblendete Spalte oder eine Spalte vom Typ,INTEGER PRIMARY KEY
wenn sie deklariert ist.Das ist
_ID
normalerweise die Standardspaltequelle
Ich hatte unter mySQL einige Probleme damit. Die LAST_INSERT_ID ist kein zuverlässiger Weg, um die ID abzurufen. 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 sich auf die Rückgabe dieser ID auswirken. Wir hatten einen Server mit durchschnittlich 7000 Benutzern pro Minute und er stolperte immer.
Die Lösung bestand darin, Daten aus der von Ihnen eingefügten Abfrage zu verwenden und dann anhand dieser Daten nach diesem Ergebnis zu suchen. Sie machen eine Anfrage und suchen trotzdem nach der letzten ID. Sie können also auch eine SELECT id FROM-Tabelle erstellen, in der field = var und field = var, um die ID abzurufen. Es ist ein leichter Leistungseinbruch bei der Abfrage, aber ein viel zuverlässigeres Ergebnis wird zurückgegeben.
quelle
Man kann einfach die zuletzt eingefügte Zeile _id mit abrufen
last_insert_rowid()
. Der Beispielcode ist wie folgt.quelle