这是我的第一个问题,请耐心等待,如果不清楚我的意思,请告诉我.我不知道如何寻找答案.我对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,这样您就可以判断插入是否成功.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。