android - una - ¿Cómo puedo crear un disparador entre la tabla normal y la tabla fts3?
trigger genérico para auditar cambios en una tabla mysql (1)
He tenido problemas al cambiar entre tablas FTS3 y tablas de bases de datos normales. Mi aplicación es muy simple y permite al usuario agregar contactos a una base de datos y pueden buscar contactos que coincidan con la consulta de búsqueda (por qué utilicé una tabla fts) y el resultado se muestra en una lista con un onItemclicklistener. Pero cuando hago clic en el elemento, aparece un error. He reenviado este error a la base de datos (si uso una base de datos normal funciona, pero si utilizo fts no lo hace). Así que decidí usar ambos tipos de bases de datos y me preguntaba si alguien podría mostrarme cómo se crea un desencadenador para sincronizar las bases de datos.
Mi primera base de datos es CONTACTO (nombre de la base de datos) y la tabla se llama CONTACTOS. La segunda tabla de la base de datos es CONTACTS_FTS. Todo lo que estoy buscando es COL_NAME, ¿eso es todo lo que necesito en mi tabla CONTACTS_FTS? Me preguntaba si alguien podría verificar si mi activador es válido.
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;";
Creo que la opción para la tabla de "contenido externo" solo está disponible para FTS4 y no para FTS3.
Intente usar la tabla FTS4 en lugar de FTS3.