2013-02-15 75 views
5

我一直有問題在FTS3表和普通數據庫表之間切換。我的應用程序非常簡單,允許用戶將聯繫人添加到數據庫,並且可以搜索與搜索查詢相匹配的聯繫人(爲什麼我使用了fts表),然後使用onItemclicklistener將結果顯示在列表中。但是當我點擊該項目時,出現錯誤。我把這個錯誤追溯到數據庫(如果我使用正常的數據庫,它會工作,但如果我使用FTS,它不會)。所以我決定使用這兩種類型的數據庫,並想知道如果有人能告訴我如何創建一個觸發器來同步數據庫。如何在普通表和fts3表之間創建觸發器?

我的第一個數據庫是CONTACT(數據庫名稱),該表格被稱爲CON​​TACTS。第二個數據庫表是CONTACTS_FTS。我正在搜索的所有內容都是「COL_NAME」,所以我需要在我的CONTACTS_FTS表中填寫所有內容?我想知道是否有人可以檢查我的觸發器是否有效?

public static final String DATABASE_NAME = "CONTACT"; 
public static final String DATABASE_TABLE = "CONTACTS"; 
private static final String DATABASE_TABLE_FTS = "CONTACTS_FTS"; 
private static final int DATABASE_VERSION = 20; 
private Context ourContext; 
private DbHelper DBHelper; 
private static SQLiteDatabase db; 
private static final String DATABASE_CREATE = 
    "CREATE TABLE " + DATABASE_TABLE + " (" + 
    COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
    COL_NAME + " TEXT NOT NULL, " + 
    COL_EMAIL + " TEXT NOT NULL, " + 
    COL_CELL + " TEXT NOT NULL, " + 
    COL_ARRIVAL + " TEXT NOT NULL, " + 
    COL_DEPARTURE + " TEXT NOT NULL, " + 
    COL_FLIGHT_NUMBER + " TEXT NOT NULL, " + 
    COL_HOTEL_ROOM_NUMBER + " TEXT NOT NULL, " + 
    COL_EVENT1 + " TEXT NOT NULL, " + 
    COL_EVENT2 + " TEXT NOT NULL, " + 
    COL_EVENT1_ROOM + " TEXT NOT NULL, " + 
    COL_EVENT2_ROOM + " TEXT NOT NULL);"; 

private static final String DATABASE_CREATE_FTS = 
    "CREATE VIRTUAL TABLE " + DATABASE_TABLE_FTS + " USING fts3(" + 
    "content=" + "\"CONTACTS\", " + 
    COL_NAME + ");"; 

private static final String Trigger = 
    "CREATE TRIGGER contacts_Trigger " + 
    "AFTER INSERT "+ "ON " + DATABASE_TABLE + 
    " BEGIN " + 
    "INSERT " + DATABASE_TABLE_FTS + " SET " + COL_NAME + " = new.COL_NAME WHERE " + COL_ID + " = old.COL_ID;" + 
    " END;"; 
+0

您找到答案? – Lion789 2014-02-20 00:23:05

回答