Utilizar SQLite Trigger para actualizar el campo "LastModified"

Esto podría ser más una cuestión de diseño, pero aquí va. Estoy escribiendo una aplicación de Android que utiliza una base de datos SQLite local (con varias tablas) que se sincroniza con una base de datos MySQL cada ahora y luego. Sólo quiero actualizar las filas modificadas en mi base de datos. Para ello, agrego una columna " last_modified " a cada fila que indica la hora en que se añadió / actualizó / reemplazó / etc.

Soy nuevo en las operaciones de base de datos, pero he visto que un desencadenador podría ser la mejor manera de hacer esto. Tengo un par de preguntas relacionadas con Triggers, SQLite y Android.

He leído este enlace: en la actualización current_timestamp con SQLite Básicamente dice que estoy usando el enfoque correcto. Mis preguntas son:

  1. ¿Dónde debo poner la db.execSQL("CREATE TRIGGER...") ? ¿Antes o después de crear las tablas?
  2. ¿Puedo utilizar el mismo desencadenador para cada tabla en mi base de datos? Es decir, puede el Disparador detectar automáticamente qué tabla y fila está siendo actualizada / insertada / reemplazada / etc. Y notificar para establecer el campo " last_modified " de esa fila, o tengo que crear un last_modified separado para cada tabla?
  3. Ya que soy bastante nuevo en las operaciones de la base de datos, ¿podría proporcionar un ejemplo de la sentencia de Android Trigger que realiza el comportamiento anterior, o proporcionar un recurso a un ejemplo?

O si los desencadenantes son una mala idea, ¿hay mejores alternativas?

Gracias.

One Solution collect form web for “Utilizar SQLite Trigger para actualizar el campo "LastModified"”

Una respuesta corta y dulce para usted:

  1. Después, el disparador tiene una tabla válida para referencia.
  2. Debe ejecutar un CREATE TRIGGER para cada combinación de tabla / columna que desee afectar. La base de datos no asumirá porque otra tabla tiene una columna last_modified que quiere que ésta se comporte igual …
  3. El disparador en su acoplamiento es ejecutable (lo utilicé yo mismo), apenas cambie los nombres de la tabla / columna.

Por último, usar un gatillo como este es la forma más fácil que sé mantener last_modified o last_accessed timestamp.

Mi gatillo (en forma java):

 private static final String UPDATE_TIME_TRIGGER = "CREATE TRIGGER update_time_trigger" + " AFTER UPDATE ON " + TABLE_NAME + " FOR EACH ROW" + " BEGIN " + "UPDATE " + TABLE_NAME + " SET " + TIME + " = current_timestamp" + " WHERE " + ID + " = old." + ID + ";" + " END"; 

Adición

De acuerdo con el sitio web de SQLite que necesita para crear un disparador para cada tipo de acción. En otras palabras, no se puede utilizar:

 CREATE TRIGGER trigger_name AFTER UPDATE, INSERT ... 

De su último comentario puede haber descubierto la mejor manera de manejar una declaración INSERT para nuestro propósito:

 CREATE TABLE foo ( _id INTEGER PRIMARY KEY, last_modified TIMESTAMP NOT NULL DEFAULT current_timstamp); 

En esta tabla, no es necesario crear un desencadenador de marca de tiempo para una instrucción INSERT, ya que se realiza ya. (Divertido hecho: INTEGER PRIMARY KEY implica implícitamente AUTOINCREMENT NOT NULL así como el valor incremental por defecto a nuestra columna _id .)

  • Android: No se puede realizar esta operación porque se ha cerrado el grupo de conexiones
  • La restricción UNIQUE falló: base de datos sqlite: android
  • Problema de base de datos SQLite en TextView
  • cómo crear base de datos una sola vez, a continuación, leer y escribir varias veces desde él, SQLite, OpenHelper, Android
  • Cómo actualizar la base de datos Sqlite para una sola columna utilizando cláusula WHERE en android
  • ¿Por qué se ha borrado la base de datos SQLite al borrar los datos de la aplicación de Application Management?
  • ¿Cómo unir dos tablas SQLite en mi aplicación de Android?
  • Android cadena de escape real en sqlite
  • Consulta SQLite de Android con clave externa utilizando la tormenta o una alternativa
  • Android / SQLite - Operación de bits en la cláusula WHERE
  • Prácticas recomendadas para unir tablas y notificar a ContentObservers en Android ContentProvider
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.