Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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
Sqlite Android db没有更新或删除FTS?_Android_Database_Sqlite_Full Text Search - Fatal编程技术网

Sqlite Android db没有更新或删除FTS?

Sqlite Android db没有更新或删除FTS?,android,database,sqlite,full-text-search,Android,Database,Sqlite,Full Text Search,嘿,所以我使用FTS3和Sqlite来更快地搜索我的android应用程序,然而,当我编辑一个单词或删除一个单词时,它在我的真实db上发生得很好,但在FTS上,什么也没有发生 当我搜索名称pre-edit/update或post-delete时,它仍然显示,这意味着它在数据库中 不确定哪里出了问题,或者如果我必须以另一种方式处理,以下是我的代码: /* * deleting all words from dictionary */ public void delete

嘿,所以我使用FTS3和Sqlite来更快地搜索我的android应用程序,然而,当我编辑一个单词或删除一个单词时,它在我的真实db上发生得很好,但在FTS上,什么也没有发生

当我搜索名称pre-edit/update或post-delete时,它仍然显示,这意味着它在数据库中

不确定哪里出了问题,或者如果我必须以另一种方式处理,以下是我的代码:

/*
     * deleting all words from dictionary
     */
    public void deleteAllWords(DatabaseWords db_delete) {
        Log.d("enter delete in dbhelper",
                "enter delete in dbhelper "
                        + String.valueOf(db_delete.get_id()));
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_WORDS, KEY_DICTIONARYID + "=?",
                new String[] { String.valueOf(db_delete.get_dictionaryId()) });
    }

    /*
     * deleting all words FTS from dictionary
     */
    public void deleteAllWords_fts(DatabaseWordsFTS db_delete) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(
                TABLE_WORDS_FTS,
                KEY_DICTIONARY_ID_FTS + "=?",
                new String[] { String.valueOf(db_delete.get_dictionary_id_fts()) });
    }

    /*
     * 
     * 
     * /* deleting a dictionary
     */
    public void deleteDictionary(DatabaseDictionary dictionary) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_DICTIONARY, KEY_ID + "=?",
                new String[] { String.valueOf(dictionary.get_id()) });
    }

    /*
     * deleting a word
     */
    public void deleteWord(DatabaseWords db_delete) {
        Log.d("enter delete in dbhelper",
                "enter delete in dbhelper "
                        + String.valueOf(db_delete.get_id()));
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_WORDS, KEY_ID + "=?",
                new String[] { String.valueOf(db_delete.get_id()) });
    }

    /*
     * deleting a word FTS
     */
    public void deleteWord_fts(DatabaseWordsFTS db_delete) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(TABLE_WORDS_FTS, KEY_ID + "=?",
                new String[] { String.valueOf(db_delete.get_id()) });
    }

/*
     * updating a word
     */
    public int updateWord(DatabaseWords word) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_DICTIONARYID, word.get_dictionaryId());
        values.put(KEY_WORD1, word.get_word1());
        values.put(KEY_WORD2, word.get_word2());
        values.put(KEY_WORD3, word.get_word3());
        values.put(KEY_WORD4, word.get_word4());

        // updating row
        return db.update(TABLE_WORDS, values, KEY_ID + "=?",
                new String[] { String.valueOf(word.get_id()) });

    }

    /*
     * updating a word FTS
     */
    public int updateWord_fts(DatabaseWordsFTS word_fts) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_DICTIONARY_ID_FTS, word_fts.get_dictionary_id_fts());
        values.put(KEY_WORD1_FTS, word_fts.get_word1_fts());
        values.put(KEY_WORD2_FTS, word_fts.get_word2_fts());
        values.put(KEY_WORD3_FTS, word_fts.get_word3_fts());
        values.put(KEY_WORD4_FTS, word_fts.get_word4_fts());

        // updating row
        return db.update(TABLE_WORDS_FTS, values, KEY_ID + "=?",
                new String[] { String.valueOf(word_fts.get_id()) });

    }
我把常规的那个放在上面,它可以工作,有FTS的那个就是FTS的那个

在这里,我添加了活动文件中的更新代码

// store in db
            // creating word
            DatabaseWords db_update = new DatabaseWords(word_id, word_d_id,
                    w_1_s, w_2_s, w_3_s, w_4_s);

            DatabaseWordsFTS db_w_fts = new DatabaseWordsFTS(word_id,
                    word_d_id, w_1_s, w_2_s, w_3_s, w_4_s);
            // insert into db create method in database helper
            db.updateWord(db_update);

            db.updateWord_fts(db_w_fts);

单词更新,但fts one不更新?

您不能使用where子句中的数值查询/更新/删除fts表中的行。它只适用于文本。但可以将其转换为一个数字:

SELECT * FROM fts_table WHERE CAST(id AS NUMERIC) = 69

您是否在更新其他表之后更新fts表?我看不到你调用updateWord_fts(…)的任何地方,我只是在上面添加了它,但是单词one updates和传入的内容是correct检查update方法的返回值。看看更新是否真的通过了。还要检查insert和delete,可能您的虚拟表是只读的…它没有执行,如何将其从只读更改为只读?我在android代码中使用了fts4,但从未尝试对其执行任何更新。尝试使用firefox sqlite加载项运行查询。我的意思是在外部创建表,然后对其运行查询。查看您的更新查询是否正确。