Вопрос по android, sqlite – Использование SQLite Trigger для обновления поля «LastModified»

10

Это может быть больше вопрос дизайна, но здесь идет. Я пишу приложение для Android, которое использует локальную базу данных SQLite (с несколькими таблицами), которая время от времени синхронизируется с базой данных MySQL. Я только хочу обновить измененные строки в моей базе данных. Для этого я добавляю столбец & quot;last_modified& Quot; к каждой строке, которая указывает время, когда эта строка была добавлена / обновлена / заменена / и т.д.

Я новичок в операциях с базами данных, но я видел, что триггер может быть лучшим способом сделать это. У меня есть пара вопросов, касающихся триггеров, SQLite и Android.

Я прочитал эту ссылку:при обновлении current_timestamp с SQLite В основном это говорит о том, что я использую правильный подход. Мои вопросы:

Where should I put the db.execSQL("CREATE TRIGGER...") statement? Before or after I create the tables? Can I use the same Trigger for every table in my database? i.e, can the Trigger automatically detect which table and row is being updated/inserted/replaced/etc. and notify to set that row's "last_modified" field, or do I have to create a separate Trigger for each table? Since I'm quite new to database operations, could you provide an example Android Trigger statement that performs the above behavior, or provide a resource to an example?

Или, если триггеры - плохая идея, есть ли лучшие альтернативы?

Спасибо.

Ваш Ответ

1   ответ
25

After, so the trigger has a valid table to reference. You need to execute a CREATE TRIGGER for every table / column combination you want affected. The database won't assume because another table has a last_modified column that you want this one to behave the same... The trigger in your link is executable (I used it myself), just change the table / column names.

easiestlast_modifiedlast_accessed

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";

Addition

cannot

CREATE TRIGGER trigger_name 
  AFTER UPDATE, INSERT ...

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

INTEGER PRIMARY KEYAUTOINCREMENT NOT NULL_id

Error: User Rate Limit Exceeded jmhend
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded jmhend

Похожие вопросы