5

FTS3 テーブルと通常のデータベース テーブルの切り替えで問題が発生しています。私のアプリケーションは非常にシンプルで、ユーザーは連絡先をデータベースに追加でき、検索クエリに一致する連絡先を検索でき (fts テーブルを使用した理由)、結果は onItemclicklistener を使用してリストに表示されます。しかし、アイテムをクリックするとエラーが発生します。このエラーをデータベースまで追跡しました (通常のデータベースを使用している場合は機能しますが、fts を使用している場合は機能しません)。そこで、両方のタイプのデータベースを使用することにしたので、データベースを同期するためのトリガーを作成する方法を誰かに教えてもらえないかと考えていました。

私の最初のデータベースは CONTACT (データベース名) で、テーブルは CONTACTS と呼ばれます。2 番目のデータベース テーブルは 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;";
4

1 に答える 1