gpt4 book ai didi

android - 当我只关心日期(这是唯一的)而不关心时间时,如何管理 Android sqlite 数据库中的日期?

转载 作者:IT王子 更新时间:2023-10-29 06:28:39 24 4
gpt4 key购买 nike

这是我的第一个问题,请多多包涵,如果我的意思不清楚,请告诉我。我不知道如何寻找答案。我对 Android 和 Java 都很陌生。

我想使用 sqlite 数据库表来存储值,并且我希望每天只有一个唯一的日期和“值”组合。想法是制作一种日志,每天只能记录一次任何内容(之后更新或编辑除外)。我决定使用 Unix 时间戳和 INTEGER 作为日期的数据类型。表格看起来像这样:

("Unix_timestamp","value","state")

现在我正在插入 System.currentTimeMillis()/1000L 但这样一来,每天可能会有数千个具有相同“值”的日期,更不用说选择问题了。

插入和选择日期最方便的方法是什么?应该通过 sqlite 函数还是某些 Android 或 java 方法来完成?

编辑:我差点忘了补充:我有一个在 Unix 时间中插入日期的想法,但在某种程度上它们是例如。总是在一天的开始(午夜),但我不知道该怎么做,该使用哪些方法。我觉得 sqlite 在日期方面真的很糟糕。

最佳答案

要在 SQLite 中获取当天开始的时间戳(以秒为单位),您可以像这样使用 strftime 函数:

strftime('%s','now','start of day')

或者,您可以使用 Calendar 在 java 中构建此值:

Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
long time = calendar.getTimeInMillis();

您可以在 CREATE TABLE 命令中使用唯一性约束来强制时间戳和值的每个组合在所有行中都是唯一的。

CREATE TABLE tableName (..., UNIQUE(column1, column2));

如果需要,您可以在同一语句中指定一个冲突算法来处理插入或更新违反此唯一性约束的情况。或者,您可以在尝试执行插入/更新时指定它:

SQLiteDatabase db = ...; // get database
long rowid = db.insertWithOnConflict(TABLE, null, values, SQLiteDatabase.CONFLICT_IGNORE);

CONFLICT_IGNORE 不会引发异常,如果它造成约束冲突,也不会写入新行。在那种情况下 insertWithOnConflict()将返回-1,这样您就可以判断插入是否成功。

关于android - 当我只关心日期(这是唯一的)而不关心时间时,如何管理 Android sqlite 数据库中的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32215979/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com