我想在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
解析为。{
Tue Dec 24 19:00:00 EST 2013
这是我解析日期的方法:
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'
在结果中我得到了意想不到的结果。我该如何解决?
答案 0 :(得分:1)
Date
中{p> DateTime
和SQLite
不是supported datatypes。作为SQLite
创建者自己propose,我们应该使用字符串或整数来存储这些类型。您建议的解决方案使用TEXT
。
但是,我认为通常使用字符串而不是整数是错误的决定,特别是如果你想比较。这是another thread在SO中讨论相同的问题。您还可以在那里查看推荐的解决方案。我也支持这种方法。
答案 1 :(得分:0)
对于我的DB,我使用“LONG”类型(基本上是“INT”)并将时间存储在epoch millis中。然后,您可以使用Calendar实例设置查询所需的各种时间间隔的值:
select * from lead_time where value between calendar1.getTimeInMillis() and calendar2.getTimeInMillis();
似乎运行良好,但表格没有易于阅读的日期。快速查询和易于携带的数据IMO的小价格。
答案 2 :(得分:-2)
您可以使用参数化查询:How do I use prepared statements in SQlite in Android?
SQLiteDatabase db = dbHelper.getWritableDatabase();
SQLiteStatement stmt = db.compileStatement("select * from lead_time where value between ? and ?");
stmt.bindDate(1, date1);
stmt.bindDate(2, date2);
stmt.execute();