SQLiteDatabase.insert () возвращает неверный идентификатор строки для виртуальных таблиц - PullRequest
7 голосов
/ 26 июня 2010

Когда я вставляю строку в базу данных полнотекстового поиска, объявленную как:

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.

1 Ответ

1 голос
/ 27 июня 2010

С Полнотекстовый поиск SQLite :

Ваша таблица должна содержать как минимум 1 Текстовое поле.

PS: +1: я не знал о виртуальных таблицах . Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...