我的Andoid应用程序中有一个SQLite数据库。我有三行,ID,DATA和DATE,其中SQLite通过使用TIMESTAMP
如下CREATE TABLE $TABLE ($ID INTEGER PRIMARY KEY AUTOINCREMENT, $DATE TEXT NOT NULL, $DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP);
来填充DATE。
对我来说很好。但是,当我更新DATA
行时,时间戳记不会随之更新。我更新了DATA
广告,如下所示:
fun updateData(id: String, data: String): Boolean {
db.update(TABLE, ContentValues().apply {
put(DATA, data)
}, "$ID = ?", arrayOf(id))
return true
}
更新后,时间戳保持不变。惠普可以在每次数据更新后更新时间戳吗?
非常感谢。
答案 0 :(得分:2)
创建此触发器:
CREATE TRIGGER tab_after_update AFTER UPDATE ON tab
WHEN old.data <> new.data
BEGIN
UPDATE tab
SET date = CURRENT_TIMESTAMP
WHERE id = old.id;
END;
用表名替换tab
。
每当列data
更新时,就会执行此操作。
您必须在表的SQLiteOpenHelper
语句之后立即在onCreate()
的类CREATE
方法中执行此语句。
在类中进行更改后,请从要测试它的设备上卸载该应用程序,以便删除数据库并重新运行。
答案 1 :(得分:0)
我通过更改来修复了更新
override fun onCreate(db: SQLiteDatabase) {
db.execSQL("CREATE TABLE $TABLE ($ID INTEGER PRIMARY KEY AUTOINCREMENT, $DATA TEXT, $DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP);")
}
到
override fun onCreate(db: SQLiteDatabase) {
db.execSQL("CREATE TABLE $TABLE ($ID INTEGER PRIMARY KEY AUTOINCREMENT, $DATA TEXT, $DATE TEXT;")
}
然后我定义了一个变量来获取当前时间
private var date = SimpleDateFormat("dd.MM.yyyy hh:mm").format(Date())
并将其添加到update
方法中:
fun updateData(id: String, data: String): Boolean {
db.update(TABLE, ContentValues().apply {
put(DATA, data)
put(DATE, date)
}, "$ID = ?", arrayOf(id))
return true
}
仅此而已。现在,它将更新每个更改/修改的日期。