FTS3 | rowid问题|删除不工作

时间:2012-02-01 16:48:24

标签: java android database sqlite fts3

我最近将我的数据库更新为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 + "'");

也不要工作。似乎FTS3中不存在具有自动递增数字的列COL_KEY_ID = BaseColumns._ID?我想,我可以使用rowid,但它没有按预期工作。如果我删除了我的第一个条目,下面的命令会被删除。

我怎么能像以前一样让它恢复工作? 修改:现在发现修复..

2 个答案:

答案 0 :(得分:1)

找到修复程序。不要按ID删除,现在按名称删除。

答案 1 :(得分:0)

我认为问题来自

_ID = ?

_ID是一个整数了吗?被String替换。你的第二个不工作方法也是如此。