【问题标题】:greenDAO - Date type, returning 1/jan/1970greenDAO - 日期类型,返回 1/jan/1970
【发布时间】:2015-06-11 06:20:07
【问题描述】:

使用我使用的 greenDAO 生成器:

entity.addDateProperty("date").notNull();

我插入值:'2013-10-30',当我检查我的数据库时,我的值在那里。 我用这个查询检查了这个值:

select datetime(date) from myTable;

它返回: 2013-10-10 00:00:00

现在在 android 中,当我尝试检索此值时(对于每一行):

myTable.getDate();

总是返回 01/01/1970

我发现了什么(但可能不是这个问题的原因):

  1. 我在我的代码中进行了一些调试,我发现由 greenDAO 生成的类 myTableDao.java 在方法 public void readEntity(Cursor cursor, History_Job entity, int offset) 上正在返回光标处的值“2013”​​:

    entity.setDate(new java.util.Date(cursor.getLong(offset + 1)));

  2. 仍然在 myTableDao.java 中,方法 createTable() 我将此字段声明为 Integer。

    ... "'DATE' INTEGER NOT NULL ," + // 1: 日期 ...

我是在属性 DATE 上做错了什么,还是在尝试使用这种类型的字段时它是 greenDAO 上的错误?

【问题讨论】:

  • 我也遇到了同样的问题,你找到解决办法了吗?

标签: android sqlite greendao


【解决方案1】:

GreenDao 在实体中使用 Java Date 对象并将它们的 Date.getTime() (time-in-millis-since-epoch) 值存储为 SQLite INTEGER。如果您正确使用它,这两种方式都可以正常工作。我不确定您为什么要手动插入日期 - 这违背了使用 ORM 库的目的。

【讨论】:

  • 我正在使用外部 .sql 文件插入此值。如果我的应用程序是从头开始安装的,我希望我的数据库中已经有一些值,为此我有一个外部 sql 文件来填充我的数据库。
  • 有谁知道为什么GreenDAO 将日期转换为整数,而SQLite 支持DateTime 类型?
【解决方案2】:

GreenDao 总是以特定格式返回 Date。你可以称之为错误。

您可以在此处查看代码

https://github.com/greenrobot/greenDAO

你能做的是

  • here分叉GreenDao
  • 添加一个方法 setDateFormat(String format) 也贡献给其他人。

参见SQLite Date Datatypes here.

的文档

SQLite 以 TEXT、REAL 和 INTEGER 三种格式存储日期,所以这都是关于向您返回日期的 GreenDao 方法。您可以对其进行修改。

【讨论】:

    猜你喜欢
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 2023-04-09
    • 2016-03-29
    • 2013-10-11
    • 2011-08-14
    相关资源
    最近更新 更多