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 .)

  • ListView Casilla de verificación Guardar estado
  • Cómo hacer una copia de seguridad / restaurar la base de datos SQLite en Android a Dropbox
  • Búsqueda en una base de datos SQLite que contenga datos cítricos
  • Cómo guardar imágenes en la base de datos
  • Cómo eliminar la base de datos en sqlite?
  • EditText afterTextChanged no funciona
  • Cómo probar si el cursor está vacío en una consulta SQLiteDatabase
  • Expandablelistview extiende simplecursoradapter para poblar desde sqlite
  • SQLite "INSERT OR REPLACE INTO" no funciona
  • Base de datos de SQLite Android eliminada después de desinstalar
  • ¿Cómo SQLite en Android maneja largas cadenas?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.