Cómo utilizar TRIGGER en Android SQLite
Tengo dos tablas en la base de datos:
- La tabla uno tiene la columna nombre y número de habitación
- La tabla dos tiene el número de habitación y la columna de tiempo.
Ahora, cuando el número de habitación de la primera columna se elimina o agrega, mi segunda tabla también debe actualizarse. Creo que esto es posible con comando TRIGGER, pero no estoy realmente seguro de cómo usarlo.
- SQLite static openDatabase error de método de base de datos en Android
- Android sqlite actualización de fila
- Transacción de la base de datos Android
- ListView Casilla de verificación Guardar estado
- Cómo construir una consulta SQLite a GROUP by ORDER?
Generalmente, mi sentencia de creación de base de datos es así:
private static final String DATABASE_CREATE_PATIENT_ID_TABLE = "create table " + DATABASE_PATIENT_TABLE + " (_id integer primary key autoincrement," + "patient_number text not null, room_numbertext not null, " + "patient_initial text not null);";
Ahora, cuando las habitaciones se eliminan o se agregan en la primera tabla mi segunda tabla debe ser actualizada.
private static final String DATABASE_CREATE_NOTES_ID_TABLE = "create table " + DATABASE_NOTES_TABLE + " (_id integer primary key autoincrement," + " room_number text not null, time_hour text not null, " + "notes_hour text not null, today_date text not null);";
Al principio estaba haciendo era comparar el contenido de las dos tablas. Pero esto definitivamente conducirá a un problema de rendimiento más tarde cuando los datos aumenten. Así que tropecé con TRIGGER cosa. Creo que esto puede resolver mi problema, pero no sé cómo exactamente debo usarlo.
Llegué a conocerlo desde el uso de la base de datos SQLite con Android .
He explicado este problema con la captura de pantalla en mi otra pregunta. Por favor, eche un vistazo a ella y si por favor amablemente me guía nueva pregunta
- IllegalArgumentException: columna no válida
- Mejor detección de corrupción de SQLite
- Rendimiento ORM: ¿es greenDAO más rápido que ORMLite?
- ¿Por qué ContentValues tiene un método put que admite booleanos?
- ¿Cómo eliminar la base de datos del emulador?
- SQLiteException cerca de "<" mientras se borra la consulta
- Android: cómo consultar SQLiteDatabase con args de selección de no-cadena?
- Excepción de SQLite "no such table" de Android
Comienzo simple para ti
create trigger simple_trigger1 after insert on database_patient_table begin update database_notes_table; end create trigger simple_trigger2 after delete on database_patient_table begin update database_notes_table; end
Utilice esta documentación http://www.sqlite.org/lang_createtrigger.html
Dependiendo de la versión de SQLite en la que se esté ejecutando su aplicación , es posible que pueda utilizar el soporte de clave externa de SQLite .
En las versiones más antiguas de SQLite, puede utilizar la utilidad genfkey para crear desencadenantes que impongan restricciones de clave externa (las versiones anteriores de SQLite analizarían las restricciones de clave externa agregadas durante una CREATE TABLE
pero no las implementarían).
Espero que esto ayude.
Demo para Sqlite Trigger en Android AQUÍ
Trigger es un código de procedimiento ejecutado después de que ocurra un determinado evento en nuestra base de datos.
He escrito una demostración de muestra para el disparador.
Ejemplo: Considere una base de datos de cualquier universidad. Por lo tanto, si se agrega un registro de Estudiante en la tabla de estudiantes, se agrega nueva fila (tupla) automáticamente en la sección de biblioteca o sección de cantina, etc.
Así que escribiendo un simple disparador podemos insertar automáticamente nuevos registros en otras secciones evitando el código de la placa de la caldera.
Esquema
CREATE TABLE student (sid INTEGER PRIMARY KEY, sname TEXT) CREATE TABLE canteen (cid , sid ) CREATE TABLE library (lid INTEGER PRIMARY KEY, sid TEXT)
Disparador para agregar registros automáticamente en la biblioteca y la mesa de comedor:
CREATE TRIGGER if not exists add_student AFTER INSERT ON[student] for each row BEGIN insert into library values (2 , new.sid ); insert into canteen values (3 , new.sid); END;
Explicación: El concepto aquí es crear un disparador, que inserta los valores en la cantina y la biblioteca basados en la nueva identificación del estudiante.
- SOAP Envelope Response Error: Error al leer XMLStreamReader
- Cambiar el mensaje de notificación de android sin parar y volver a iniciar el servicio