android - 使用 SQLite 触发器更新 "LastModified"字段

标签 android sqlite triggers

这可能更像是一个设计问题,但这里是。我正在编写一个 Android 应用程序,它使用本地 SQLite 数据库(具有多个表),不时与 MySQL 数据库同步。我只想更新数据库中修改过的行。为此,我向每一行添加了一个列“last_modified”,以指示添加/更新/替换/等该行的时间。

我是数据库操作的新手,但我发现触发器可能是执行此操作的最佳方式。我有几个与触发器、SQLite 和 Android 有关的问题。

我已阅读此链接:on update current_timestamp with SQLite它基本上说我正在使用正确的方法。我的问题是:

  1. 我应该在哪里放置 db.execSQL("CREATE TRIGGER...") 语句?在我创建表格之前还是之后?
  2. 我可以对数据库中的每个表使用相同的触发器吗?即,触发器能否自动检测正在更新/插入/替换/等的表和行。并通知设置该行的“last_modified”字段,还是我必须为每个表创建一个单独的触发器?
  3. 由于我对数据库操作很陌生,您能否提供一个执行上述行为的 Android Trigger 语句示例,或者提供示例资源?

或者,如果触发器不是一个好主意,是否有更好的选择?

谢谢。

最佳答案

给你一个简短而甜蜜的回答:

  1. 之后,触发器有一个有效的表可以引用。
  2. 您需要为您想要影响的每个表/列组合执行 CREATE TRIGGER。数据库不会假设,因为另一个表有一个 last_modified 列,您希望这个表的行为相同...
  3. 您链接中的触发器是可执行的(我自己使用过),只需更改表/列名称即可。

最后,使用这样的触发器是我所知道的维护 last_modifiedlast_accessed 时间戳的最简单方法。

我的触发器(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";

添加

根据SQLite website您需要为每种类型的操作创建一个触发器。换句话说,您不能使用:

CREATE TRIGGER trigger_name 
  AFTER UPDATE, INSERT ...

根据您上次的评论,您可能已经找到了为我们的目的处理 INSERT 语句的最佳方法:

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

在此表中,您不需要为 INSERT 语句创建时间戳触发器,因为它已经完成了。 (有趣的事实:INTEGER PRIMARY KEY 隐式地将 AUTOINCREMENT NOT NULL 以及默认增量值添加到我们的 _id 列。)

关于android - 使用 SQLite 触发器更新 "LastModified"字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10804892/

相关文章:

android - Wi-Fi 直接工作的距离范围

android - 带有 Viewpager2-Fragments 的实时数据

java - 在 Java 中从 XML 获取属性值

sqlite - Flutter - 在哪里放置自己的 SQLite .db 文件?

python: *为什么*使用 python 的字符串操作组装 sqlite 查询不安全?

mysql - 使用before insert触发器在表中插入和删除数据

mysql - 如何通过 mysql 触发器更新 ETS 表

java.lang.NoSuchMethodError : android. app.Dialog.create

mysql - 无法使 MySQL 功能工作

sql - sqlite 中简单字符串表的奇怪行为