【问题标题】:Storing dates in SQLite and performing search by date在 SQLite 中存储日期并按日期执行搜索
【发布时间】:2014-01-02 09:41:14
【问题描述】:

我想在 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-24Tue 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'

在结果中我得到了意想不到的结果。我该如何解决?

【问题讨论】:

  • 你得到了什么结果,你期待什么?

标签: android sqlite simpledateformat


【解决方案1】:

DateDateTime 不是 supported datatypes 中的 SQLite。作为SQLite 创建者自己propose,我们应该使用字符串或整数来存储这些类型。您提出的解决方案使用TEXT

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

【讨论】:

    【解决方案2】:

    对于我的数据库,我使用类型“LONG”(基本上是“INT”)并将时间存储在纪元毫秒中。然后,您可以使用 Calendar 的实例来设置查询所需的各种时间间隔的值:

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

    似乎运作良好,但表格没有易于阅读的日期。快速查询和易于移植的数据 IMO 价格低廉。

    【讨论】:

      【解决方案3】:

      您可以使用参数化查询: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();
      

      【讨论】:

      • 废话。没有bindDate 方法。 Date 不是 SQLite 的类型
      猜你喜欢
      • 2013-10-02
      • 2019-07-22
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 2015-09-23
      相关资源
      最近更新 更多