jmh*_*end 10 sqlite android triggers
这可能更像是一个设计问题,但是这里有.我正在编写一个Android应用程序,该应用程序使用本地SQLite数据库(具有多个表),并且每隔一段时间就与MySQL数据库同步.我只想更新数据库中的修改行.为此,我在last_modified每行添加一列" ",表示添加/更新/替换/等行的时间.
我是数据库操作的新手,但我已经看到触发器可能是最好的方法.我有几个与Triggers,SQLite和Android相关的问题.
我已经阅读了这个链接:在使用SQLite更新current_timestamp它基本上说我正在使用正确的方法.我的问题是:
db.execSQL("CREATE TRIGGER...")声明放在哪里?在创建表之前或之后?last_modified"字段,还是必须为每个表创建一个单独的触发器?或者如果触发器是一个坏主意,还有更好的选择吗?
谢谢.
Sam*_*Sam 25
一个简短而又甜蜜的答案:
last_modified列,您希望这个列的行为相同...最后,使用这样的触发器是我知道维护或时间戳的最简单方法.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";
Run Code Online (Sandbox Code Playgroud)
加成
根据SQLite网站,您需要为每种类型的操作创建触发器.换句话说,你不能使用:
CREATE TRIGGER trigger_name
AFTER UPDATE, INSERT ...
Run Code Online (Sandbox Code Playgroud)
根据您的上一条评论,您可能已经找到了为我们的目的处理INSERT语句的最佳方法:
CREATE TABLE foo (
_id INTEGER PRIMARY KEY,
last_modified TIMESTAMP NOT NULL DEFAULT current_timstamp);
Run Code Online (Sandbox Code Playgroud)
在此表中,您不需要为INSERT语句创建时间戳触发器,因为它已经完成.(有趣的事实:INTEGER PRIMARY KEY隐式添加AUTOINCREMENT NOT NULL以及默认增量值到我们的_id列.)
| 归档时间: |
|
| 查看次数: |
14261 次 |
| 最近记录: |