2011-05-12 13 views
7

Tengo dos tablas en la base de datos:Cómo utilizar TRIGGER en Android SQLite

  • mesa uno tiene nombre y número de habitación columna
  • mesa dos tiene el número de habitación y la columna de tiempo.

Ahora cuando se borre o se agregue el número de habitación de la primera columna, también se debe actualizar mi segunda tabla. Creo que esto es posible con el comando TRIGGER, pero no estoy seguro de cómo usarlo.

Generalmente Mi sentencia de creación de base de datos es la siguiente:

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 añaden en la primera mesa de mi segunda tabla se debe actualizar.

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 lo que hacía era comparar el contenido de las dos tablas. Pero esto definitivamente conducirá a un problema de rendimiento más adelante cuando los datos aumenten. Así que me encontré con TRIGGER. Creo que esto puede resolver mi problema, pero no sé exactamente cómo debería usarlo.

Lo llegué a saber de Using SQLite Database with Android.

He explicado este problema con la captura de pantalla en mi otra pregunta. Por favor, tener una mirada en ella y si por favor amablemente me guía new question

+0

¿Por qué las personas que hacen preguntas sobre problemas con la base de datos son tan reacias a nombrar sus tablas en la pregunta? Esto no está dirigido solo a ti, Shaista (aunque eres 'culpable' de esto en esta pregunta); es una observación general sobre preguntas relacionadas con la base de datos en SO. –

+1

Pero lo he nombrado como puede ver en el código en sí. Es directamente de mi código, solo cuando lo expliqué lo mantuvo corto solo para señalar la pregunta directa. Mi intención era clara, puede ser malinterpretada. –

+1

@Jonathan - Hay diferentes problemas relacionados con el trabajo, nadie quiere revelar su código de trabajo al público general a menos que estén completamente terminados. Solo es mi opinión. – yogsma

Respuesta

6

inicio sencillo 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 

uso de esta documentación http://www.sqlite.org/lang_createtrigger.html

+1

Gracias por su respuesta. Pero algunas preguntas rápidas Mi función de inserción para la base de datos del paciente tiene el nombre insertInPatientDb, así que ¿debo escribir el nombre exacto de la función de inserción o simplemente insertar como dijiste es suficiente? y no he modificado nada en la función de actualización. ¿Debo cambiar también la función de actualización? –

+0

Sí, necesita usar el nombre de la tabla de la base de datos. Cambie la función de actualización de la forma en que desea que se actualice en la segunda tabla. Acabo de dar un ejemplo, lea esa documentación, muy útil. – yogsma

+0

Lo siento, pero me siento como volver a la plaza. –

3

Dependiendo de qué version of SQLite your app is running on, es posible que pueda utilizar SQLite's foreign key support .

En la versión más antigua del de SQLite es posible que pueda utilizar la utilidad genfkey para crear disparadores para hacer cumplir sus restricciones de clave externa (las versiones anteriores de SQLite quisiera procesar a restricciones de clave externa agregados durante una declaración CREATE TABLE, pero no sería realmente implementarlos)

Espero que esto ayude.

0

Demo for Sqlite Trigger in Android HERE

gatillo son algunos código de procedimiento ejecutado después de cierto evento ocurre en nuestra base de datos.

He escrito una demostración de muestra para el desencadenador.

Ejemplo: Considere una base de datos de cualquier universidad. Entonces, si se agrega cualquier registro de Estudiante en la tabla de estudiantes, se agrega automáticamente una nueva fila (tupla) en la sección de biblioteca o cantina, etc.

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 automáticamente los registros en la biblioteca y en la cantina tabla:

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 se insertan los valores de cantina y biblioteca de base en la nueva identificación de estudiante