Получить сгенерированный идентификатор после вставки

Я использую SQLite с Android, и я хочу знать, как наилучшим образом получить сгенерированный идентификатор строки, которую я вставил.

Решение, которое, как я думаю, делает поиск после include, но выглядит не лучшим образом.

4b9b3361

Метод insert возвращает id только что вставленной строки или -1, если во время вставки была ошибка.

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

где db SQLiteDatabase.

229
ответ дан 23 марта '11 в 21:20
источник

Я проверил источники. insert использовать функцию sqlite3_last_insert_rowid для возврата идентификатора. Согласно документации: https://www.sqlite.org/c3ref/last_insert_rowid.html Идентификатор строки - это скрытый столбец или столбец типа INTEGER PRIMARY KEY, если он объявлен.

Итак, это столбец по умолчанию _ID обычно

3
ответ дан 29 мая '16 в 21:16
источник

Если используется ContentValues:

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

Если запрос exec использует 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);
3
ответ дан 04 дек. '16 в 22:04
источник

У меня было довольно много проблем с этим на mySQL, LAST_INSERT_ID не является надежным способом получить идентификатор, если у вас есть пользователи, забивающие базу данных, возвращаемый идентификатор не может быть идентификатором, который был вставлен запросом, который у вас есть run, несколько других пользователей могут повлиять на возврат этого идентификатора. У нас был сервер со средним числом 7000 пользователей в минуту, и он всегда спотыкался.

Решение, которое мы имели, состояло в том, чтобы использовать данные из введенного вами запроса и затем искать этот результат с использованием этих данных. Вы все равно делаете запрос, ища последний идентификатор. Таким образом, вы можете также сделать таблицу SELECT id FROM, где field = var и field = var, чтобы получить идентификатор. Его небольшая производительность попала в запрос, но вернулся гораздо более надежный результат.

1
ответ дан 29 мая '16 в 21:30
источник