Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了android – 使用SQLite触发器来更新“LastModified”字段大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
这可能更多的是一个设计问题,但是在这里.我正在编写一个 Android应用程序,该应用程序使用与MysqL数据库同步的本地sqlite数据库(具有多个表).我只想更新数据库中的修改行.为了做到这一点,我在每一行中添加一列“last_modified”,这些列表示该行被添加/更新/替换/等等的时间.

我是数据库操作的新手,但是我看到触发器可能是最好的方法.我有几个有关触发器,sqlite和Android的问题.

我已经阅读了这个链接:@L_450_17@它基本上说我正在使用正确的方法.我的问题是:

>我应该在哪里放db.execsql(“CREATE trigGER …”)语句?在创建表之前或之后?
>我可以为我的数据库中的每个表使用相同的trigger吗?即,触发器可以自动检测哪些表和行正被更新/插入/替换等.并通知设置该行的“last_modified”字段,或者我必须为每个表创建一个单独的触发器?
>由于我对数据库操作非常新鲜,您能否提供一个执行上述行为的示例Android trigger语句,或者为示例提供资源?

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

谢谢.

解决方法

一个简短而甜美的答案给你:

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

最后,使用这样的触发器是我知道维护last_modified或last_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”字段全部内容,希望文章能够帮你解决android – 使用SQLite触发器来更新“LastModified”字段所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。