Android 在SQLite中存储日期并按日期执行搜索

Android 在SQLite中存储日期并按日期执行搜索,android,sqlite,simpledateformat,Android,Sqlite,Simpledateformat,我想在SQLite数据库中插入类似“2013-12-24”的日期。我的要求包括日期搜索功能 查询表- CREATE TABLE IF NOT EXISTS LEAD_TIME_TABLE ( LEAD_TIME_ID INTEGER PRIMARY KEY AUTOINCREMENT, **LEAD_TIME_VALUE DATE NOT NULL,**

我想在SQLite数据库中插入类似“2013-12-24”的日期。我的要求包括日期搜索功能

查询表-

CREATE TABLE IF NOT EXISTS LEAD_TIME_TABLE
             (
             LEAD_TIME_ID
             INTEGER PRIMARY KEY AUTOINCREMENT,
             **LEAD_TIME_VALUE
             DATE NOT NULL,**
             LEAD_TIME_TYPE
            TEXT NOT NULL);
当我在此表中插入数据时,日期的解析方式类似于从
2013-12-24
2013年美国东部时间12月24日星期二19:00:00

这是我解析日期的方法:

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
dateFormat.setTimeZone(TimeZone.getTimeZone("IST"));
Date date = null;
try {
    date = dateFormat.parse("2013-12-24");
} catch (ParseException e) {
    e.printStackTrace();
} 
当我使用以下查询进行搜索时:

select * from lead_time where value between 'Thu Dec 26 13:30:00 EST 2013' and 'Tue Dec 31 13:30:00 EST 2013'

在结果中,我得到了意想不到的结果。如何解决此问题?

您可以使用参数化查询:


Date
DateTime
不在
SQLite
中。作为SQLite的创建者,我们应该使用字符串或整数来存储这些类型。您建议的解决方案使用
文本

然而,我认为使用字符串而不是整数通常是错误的,特别是如果您想要比较。这里是在讨论同样的问题。您也可以在那里查看推荐的解决方案。我也支持这种方法。

对于我的数据库,我使用类型“LONG”(基本上是“INT”)并以epoch millis存储时间。然后,您可以使用日历实例设置查询所需的各种时间间隔的值:

select * from lead_time where value between calendar1.getTimeInMillis() and calendar2.getTimeInMillis();

看起来效果不错,但表格中没有易于阅读的日期。对于快速查询和方便携带的数据,价格低廉。

您得到了什么结果?您期望得到什么?胡说。无
bindDate
方法<代码>日期不是SQLite的类型
select * from lead_time where value between calendar1.getTimeInMillis() and calendar2.getTimeInMillis();