簡體   English   中英

如何在Java Android中處理SQLite表的列?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM