android - Sqlite Android 数据库没有为 FTS 更新或删除?

标签 android database sqlite full-text-search

嘿,所以我使用带有 Sqlite 的 FTS3 来更快地搜索我的 Android 应用程序,但是,当我编辑一个词或删除一个词时,它在我的真实数据库上运行良好,但在 FTS 数据库上,没有任何反应。

当我搜索编辑前/更新前或删除后的名称时,它仍然显示,这意味着它在数据库中...

不确定哪里出了问题,或者我是否必须以不同的方式解决它,这是我的代码:

/*
     * 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。

我在这里添加了我的 Activity 文件中的更新代码

// 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 不更新?

最佳答案

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

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

关于android - Sqlite Android 数据库没有为 FTS 更新或删除?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21920629/

相关文章:

android - Android 中固定选项卡内的固定选项卡

php - 我可以使用 PHP/mySQL 从 Wordpress 中查询其他数据库吗?

java - sqlite:查找或替换

sql - 我如何找出在 sqlite 中删除表的正确顺序?

java - 如何在刷新之前获取 Hibernate Managed Entity 的数据库快照

数据库被锁定

android - 调用网络服务时出错

android - Google Play 开发者控制台 - 支持 Nexus 7 但无法安装 apk

Android 在应用程序中保存登录用户详细信息

database - 每个页面 View 的成本更高 - 数据库写入还是文件写入?