Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android上带FT3的SQLite-无法从搜索表中删除特定行_Android_Sqlite_Full Text Search - Fatal编程技术网

Android上带FT3的SQLite-无法从搜索表中删除特定行

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

在我的Android应用程序中,我使用FT3创建了一个虚拟表进行搜索。该表创建、填充良好(使用其他表中的数据),搜索工作正常。我还可以从虚拟表中删除所有行(使用'DELETE from'+SEARCH_table),但是我似乎无法从搜索表中删除特定行

虚拟表结构如下所示:

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);