繁体   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