![](/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.