Я недавно обновил свою базу данных до FTS3 из-за того, что расширил возможности поиска.
Моя таблица FTS3:
db.execSQL("CREATE VIRTUAL TABLE " + TABLE_FTS + " USING fts3(" + COL_ID + ", " + COL_KEY_NAME + ", "
+ COL_KEY_WEBURL + " , " + COL_KEY_MAINURL + ", " + COL_KEY_CODEC + " " + ");");
Я всегда удаляю записи из моего списка с помощью ContextMenu
. Я использовал такой метод:
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
delete(info.id);
updateList();
public void delete(long id) {
int numDeleted = database.delete("stations" , "_ID = ?", new String[] { Long.toString(id) } );
Log.d(TAG, "delete(): id=" + id + " -> " + numDeleted);
}
public void updateList() {
data.requery();
dataSource.notifyDataSetChanged();
}
Метод, info.id
, не получайте мне позицию, поэтому я изменил ее на info.position
. Положение правильное, но delet не работает. Хорошо, тогда я попробовал простое удаление вместо метода Android.
database.execSQL("DELETE FROM " + DatabaseHelper.TABLE_FTS + " WHERE " + DatabaseHelper.COL_ID + "='" + id + "'");
Не работает тоже. Кажется, что столбец COL_KEY_ID = BaseColumns._ID
с автоинкрементным номером больше не существует в FTS3? Я понял, что могу использовать rowid
, но он работает не так, как задумано. Если я удалю свою первую запись, записи ниже будут странно удалены.
Как я могу вернуть это к работе, как раньше?
Редактировать: Исправлено.