Android上带FT3的SQLite-无法从搜索表中删除特定行
在我的Android应用程序中,我使用FT3创建了一个虚拟表进行搜索。该表创建、填充良好(使用其他表中的数据),搜索工作正常。我还可以从虚拟表中删除所有行(使用'DELETE from'+SEARCH_table),但是我似乎无法从搜索表中删除特定行 虚拟表结构如下所示:Android上带FT3的SQLite-无法从搜索表中删除特定行,android,sqlite,full-text-search,Android,Sqlite,Full Text Search,在我的Android应用程序中,我使用FT3创建了一个虚拟表进行搜索。该表创建、填充良好(使用其他表中的数据),搜索工作正常。我还可以从虚拟表中删除所有行(使用'DELETE from'+SEARCH_table),但是我似乎无法从搜索表中删除特定行 虚拟表结构如下所示: public void createSearchTable(SQLiteDatabase db){ String sql = "CREATE VIRTUAL TABLE "+SEARCH_TABLE+" USI
public void createSearchTable(SQLiteDatabase db){
String sql = "CREATE VIRTUAL TABLE "+SEARCH_TABLE+" USING FTS3 (" +
SEARCH_C_ACTID + " text, "+
SEARCH_C_TEXT + " text, " +
SEARCH_C_COURSETITLE + " text, " +
SEARCH_C_SECTIONTITLE + " text, " +
SEARCH_C_ACTIVITYTITLE + " text " +
")";
db.execSQL(sql);
}
注意,我已经尝试将SEARCH_C_ACTID创建为text和int,但没有产生任何差异
但是,当我尝试以下任一操作时,搜索表中没有发生任何事情(我没有得到任何错误,并且显示没有行受到删除查询的影响):
以及:
以及:
关于信息,我检查了activityDbId值是否确实作为搜索表中SEARCH_C_ACTID列的行条目存在
非常感谢您的帮助。搜索字符串的查询应该可以工作(如果效率低下)。为什么不使用
docid
,或MATCH
?感谢@CL-不使用MATCH或docid的原因是此activityId是对原始(非FT3)表中数据的引用,因此我确实希望在整个表单元格上精确匹配,而不仅仅是字符串的一部分。可能更好的方法是在docid列中输入activityid,因为它们应该是唯一的ID。刚刚更新,将activityid放入docid列中,现在似乎工作正常
String s = SEARCH_C_ACTID + "=?";
String[] args = new String[] { String.valueOf(activityDbId) };
int result = db.delete(SEARCH_TABLE, s, args);
Log.d(TAG,"delete query result: " + result);
String sql = "DELETE FROM "+ SEARCH_TABLE + " WHERE "+ SEARCH_C_ACTID + "=" + activityDbId ;
Log.d(TAG,sql);
db.rawQuery(sql,null);
String sql = "DELETE FROM "+ SEARCH_TABLE + " WHERE "+ SEARCH_C_ACTID + "='" + activityDbId +"'";
Log.d(TAG,sql);
db.rawQuery(sql,null);