Подтвердить что ты не робот

Android Sqlite получает последний идентификатор строки вставки

Возможный дубликат:
Получить сгенерированный идентификатор после вставки

Я хочу получить последний вставленный идентификатор строки в моем приложении Android с помощью этого кода:

String query = "SELECT * from SQLITE_SEQUENCE";
int createdUserId = Integer.parseInt(dbHelper.executeSQLQuery(query).toString());

но проблема в том, что он генерирует исключение, которое не может преобразовать dbHelper.executeSQLQuery(query).toString() в integer. Я не очень хорошо разбираюсь в sqlite, но думаю, что это должно вернуть последний идентификатор строки, который был вставлен... который определенно будет int (по крайней мере, я так думаю). Итак, если это не так, можете ли кто-нибудь помочь мне узнать, как получить последний идентификатор строки в приложении Android.

Спасибо!!!

4b9b3361

Ответ 1

Ваш SQL файл будет возвращать все идентификаторы строк, а не только последние. Попробуйте что-то вроде этого...

SELECT ROWID from SQL_LITE_SEQUENCE order by ROWID DESC limit 1

Также обратите внимание, что я считаю, что выбор из SQL_LITE_SEQUENCE получит последний идентификатор из таблицы ANY, вы также можете получить доступ к SQL_LITE_SEQUENCE, выбрав ROWID в любой таблице и получив только идентификаторы для этой таблицы. IE

SELECT ROWID from MYTABLE order by ROWID DESC limit 1

И благодаря MisterSquonk для указания следующего шага в комментариях, добавив его здесь для удобства ссылок позже...

Затем оператор запроса возвращает объект Cursor, содержащий результаты, поэтому для доступа к целочисленному значению вы сделаете что-то вроде этого (я заменим более распространенные методы для вашего вспомогательного метода, просто ради других)

String query = "SELECT ROWID from MYTABLE order by ROWID DESC limit 1";
Cursor c = db.rawQuery(query);
if (c != null && c.moveToFirst()) {
    lastId = c.getLong(0); //The 0 is the column index, we only have 1 column, so the index is 0
}

(Обратите внимание, что хотя документы SQL Lite вызывают ROWID и Integer, это 64-битное целое число, поэтому в Java оно должно быть получено как длинное.)