![](/img/trans.png)
[英]How to add rows to a table after the columns were altered? (SQLite, JAVA)
[英]How to process columns of an SQLite table in Java android?
我有一個SQLite表,如:
+---+-------------+----------------+
|_id| lap_time_ms |formatted_elapse|
+---+-------------+----------------+
| 1 | 5600 | 00:05.6 |
| 2 | 4612 | 00:04.6 |
| 3 | 4123 | 00:04.1 |
| 4 | 15033 | 00:15.0 |
| 5 | 4523 | 00:04.5 |
| 6 | 6246 | 00:06.2 |
其中lap_time_ms是long類型的,表示一圈的時間(以毫秒為單位),而formatter_elapse是表示第一列(經過)的格式化(可顯示)形式的String。
我的問題是,如果我想向每個lap_time_ms添加(例如)5秒(5000),那么我將使用如下語句:
DB.execSQL("update table_name set KEY_ELAPSE=KEY_ELAPSE+5000);
哪個工作正常,但問題是formatted_elapse仍然保留其過時的值!
因此,如果我有類似的功能,什么是更新formatted_elapse列中值的最佳方法是:
public static String getFormattedTime(long milliseconds) {
// custom code that processes the long
return processedString;
}
這可能是一個漫長的過程(當然,這是隱喻的;),但是有可能讓SQLite鏈接這兩列,以便如果我更新lap_time_ms行,則formatted_elapse將自動進行適當更新。
提前致謝!
從理論上講,有可能創建一個觸發器來更新該列,但前提是必須使用某些內置SQLite函數 (Android不允許用戶定義函數)完成格式化:
CREATE TRIGGER update_formatted_elapse
AFTER UPDATE OF lap_time_ms ON MyTable
FOR EACH ROW
BEGIN
UPDATE MyTable
SET formatted_elapse = strftime('%M:%f', NEW.lap_time_ms, 'unixepoch')
WHERE _id = NEW._id;
END;
但是,將格式化的字符串存儲在數據庫中將是一個糟糕的設計。 它將存在重復信息,有可能變得不一致。
刪除formatted_elapse
列,並在需要時僅在代碼中調用getFormattedTime
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.