【问题标题】:How to use DateTime datatype in SQLite Using Room? [duplicate]如何在 SQLite Using Room 中使用 DateTime 数据类型? [复制]
【发布时间】:2019-02-08 13:23:05
【问题描述】:

我正在使用带有多个表的 SQLite 数据库。其中许多都有 DATETIME 类型的列。

我已开始将我的数据库迁移到 Room。但我不知道在实体类中使用什么数据类型在表中创建 DATETIME 类型的列。

【问题讨论】:

    标签: android sqlite android-sqlite android-room


    【解决方案1】:

    你需要使用 TypeConvertor

    如下定义类型转换器

    public class TimestampConverter {
        static DateFormat df = new SimpleDateFormat(Constants.TIME_STAMP_FORMAT);
    
        @TypeConverter
        public static Date fromTimestamp(String value) {
            if (value != null) {
                try {
                    return df.parse(value);
                } catch (ParseException e) {
                    e.printStackTrace();
                }
                return null;
            } else {
                return null;
            }
        }
    }
    

    在日期类型的字段中添加@TypeConverters注解

    @ColumnInfo(name = "created_date")
    @TypeConverters({TimestampConverter.class})
    public Date createDate;
    

    【讨论】:

    • 此方法将列数据类型创建为 TEXT 而不是 DATETIME。那么如何创建类型为 DATETIME 的列?还有一种方法可以在类型转换器中将字符串转换为日期,但不能将日期转换为字符串。那么 Date 到 String 的转换是如何发生的呢?
    • SQLite 没有 DATETIME 数据类型,如 MySQL 或其他 SQL 实现。我想你已经在使用字符串了。无论如何,答案中的 TypeConvertor 是 Room 中的标准方法。我建议使用时间戳作为 INTEGER 而不是 TEXT。
    • 无法解析 TIME_STAMP_FORMAT。知道有什么问题吗?
    • 定义你想使用的任何时间格式。
    • @Gentleman 使用这个"yyyy-MM-dd HH:mm:ss"
    猜你喜欢
    • 2019-10-06
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    相关资源
    最近更新 更多