[Android] Wie kann ich einen Auslöser zwischen normaler Tabelle und Tabelle fts3 verursachen?


Answers

Question

Ich habe Probleme beim Wechseln zwischen FTS3-Tabellen und normalen Datenbanktabellen. Meine Anwendung ist sehr einfach und ermöglicht es dem Benutzer, Kontakte zu einer Datenbank hinzuzufügen, und sie können nach Kontakten suchen, die der Suchabfrage entsprechen (warum ich eine fts-Tabelle verwendet habe) und das Ergebnis wird dann in einer Liste mit einem OnItemclicklistener angezeigt. Aber wenn ich auf das Element klicke, erhalte ich einen Fehler. Ich habe diesen Fehler zurück zur Datenbank verfolgt (wenn ich normale Datenbank benutze, funktioniert es, aber wenn ich fts verwende, tut es nicht). Also habe ich mich entschieden, beide Arten von Datenbanken zu verwenden, und mich gefragt, ob mir jemand zeigen könnte, wie ein Trigger zum Synchronisieren von Datenbanken erstellt wird.

Meine erste Datenbank ist CONTACT (Datenbankname) und die Tabelle heißt CONTACTS. Die zweite Datenbanktabelle ist CONTACTS_FTS. Alles was ich suche ist COL_NAME, also ist das alles was ich in meiner CONTACTS_FTS Tabelle brauche? Ich habe mich gefragt, ob jemand überprüfen könnte, ob mein Auslöser gültig ist.

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;";