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

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

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

Solutions Collecting From Web of "Получить сгенерированный идентификатор после вставки"

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

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

Где db – SQLiteDatabase .

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

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

Если вы используете 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); 

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

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