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

这是我的第一个问题,请耐心等待,如果不清楚我的意思,请告诉我.我不知道如何寻找答案.我对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,这样您就可以判断插入是否成功.

相关文章

SQLite架构简单,又有Json计算能力,有时会承担Json文件/RES...
使用Python操作内置数据库SQLite以及MySQL数据库。
破解微信数据库密码,用python导出微信聊天记录
(Unity)SQLite 是一个软件库,实现了自给自足的、无服务器...
安卓开发,利用SQLite实现登陆注册功能