Как обновить отметку времени в SQLite в Android? - PullRequest
0 голосов
/ 29 марта 2019

У меня есть база данных SQLite в моем приложении для Android. У меня есть три строки, ID, DATA и DATE, где DATE заполняется SQLite с помощью TIMESTAMP следующим образом CREATE TABLE $TABLE ($ID INTEGER PRIMARY KEY AUTOINCREMENT, $DATE TEXT NOT NULL, $DATE TIMESTAMP DEFAULT CURRENT_TIMESTAMP);.

У меня отлично работает. Но когда я обновляю строку DATA, отметка времени не обновляется. Я обновляю объявление DATA следующим образом:

fun updateData(id: String, data: String): Boolean {
    db.update(TABLE, ContentValues().apply {
        put(DATA, data)
    }, "$ID = ?", arrayOf(id))
    return true
}

После обновления отметка времени остается прежней. Hpw я могу обновлять тайм-ампер после каждого обновления данных?

Большое спасибо заранее.

Ответы [ 2 ]

2 голосов
/ 29 марта 2019

Создайте этот триггер:

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 таблицы.После внесения изменений в класс удалите приложение с устройства, на котором вы его тестировали, чтобы удалить и запустить базу данных.

0 голосов
/ 29 марта 2019

Я исправил обновление, изменив

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 mathod:

fun updateData(id: String, data: String): Boolean {
    db.update(TABLE, ContentValues().apply {
    put(DATA, data)
    put(DATE, date)
    }, "$ID = ?", arrayOf(id))
    return true
}

Вот и все. Теперь он обновляет дату каждого изменения / модификации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...