2014-02-20 2 views
1

안녕하세요, 그래서 내 안드로이드 응용 프로그램에 대한 빠른 검색을 위해 Sqlite와 FTS3을 사용하고 있지만, 단어를 편집하거나 하나를 삭제하면 내 실제 데이터베이스에서 문제가 발생하지 않지만 FTS에서는 아무 것도 발생하지 않습니다.FTS에 대한 Sqlite Android db가 업데이트 또는 삭제되지 않습니까?

나는 이름 사전 편집/업데이트 또는 검색 할 때 후 삭제

가 무엇인지 잘못 또는 내가 가지고있는 경우에 대해 이동하지 ... 그것은 여전히 ​​DB에 존재 의미를 나타
/* 
    * 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에있는 업데이트에 대한 코드를 추가?

+0

다른 테이블을 업데이트 한 후에 fts 테이블을 업데이트 하시겠습니까? updateWord_fts (...) –

+0

방금 ​​전에 추가했지만 단어 하나가 전달되고 전달되는 내용이 올바른지 – Lion789

+0

업데이트 방법의 반환 값을 확인하십시오. 업데이트가 실제로 진행되는지 확인하십시오. 또한 체크 삽입 및 삭제, 어쩌면 가상 테이블이 읽기 전용입니다 ... –

답변

1

where 절의 숫자 값을 사용하여 FTS 테이블의 행을 쿼리/업데이트/삭제할 수 없습니다. 그것은 텍스트에서만 작동합니다. 하지만 숫자로 변환 할 수 있습니다 :

SELECT * FROM fts_table WHERE CAST(id AS NUMERIC) = 69 
관련 문제