Когда я вставляю строку в базу данных полнотекстового поиска, объявленную как:
CREATE VIRTUAL TABLE foo USING fts3 (bar);
метод SQLiteDatabase.insert () возвращает неверный идентификатор строки. Если таблица объявлена как:
CREATE TABLE foo (bar VARCHAR(10));
возвращает правильное значение rowid. Проблема заключается в том, что когда я выполняю запрос к базе данных вскоре после вставки, используя возвращенный из метода rowid, возвращаемый курсор не имеет записей. Он работает правильно только для первой вставки в базу данных. Для последующих вставок возвращается неправильный rowid.
Что мне нужно сделать, чтобы получить правильный rowid из метода SQLiteDatabase.insert ()?
Я использую Android SDK версии 2.1update1.
Спасибо,
Dan
Обновление:
Я получил хак, чтобы получить последний идентификатор строки, используя следующий код:
private int getLastRowId(SQLiteDatabase db, String table) {
Cursor cursor = null;
try {
cursor = db
.rawQuery(String.format(Locale.US, "SELECT MAX(rowid) FROM %s", table), null);
if (cursor.moveToFirst()) {
return cursor.getInt(0);
} else {
return 0;
}
} finally {
if (cursor != null) {
cursor.close();
}
}
}
В моем случае это безопасно, потому что только один пользователь имеет доступ к приложению. Для сервисных приложений это может не работать в зависимости от того, как оно реализовано / используется.
Я полагаю, что у нас есть эта проблема, потому что при выполнении вставки в таблицы fts3 вставляется более одной строки. Строка вставляется в предметную таблицу, а также в таблицы управления fts3.