Android-Room自定义类型

前言

通常情况下,数据库存储的是基本类型floatintString等。但是有时需要存储自定义类型,比如Date,或者我们自定义的类。如果想在数据库中存储这样的值,我们就需要通知Room如何将我们自定义的类型转换为原始类型。

Type Converter

@Entity
public class Company {
    @PrimaryKey(autoGenerate = true)
    private int id;
    private String name;
    private int age;
    private String address;
    private double salary;
    private Date createDate;
    //构造方法的参数名要与字段名相同
    //否则会提示param不匹配
    public Company(String name, int age, String address, double salary,Date createDate) {
        this.name = name;
        this.age = age;
        this.address = address;
        this.salary = salary;
        this.createDate=createDate;
    }
    //省略了getter/setter方法
}

除了之前的字段外,我又添加了createDate字段,这是日期类型,如果想在数据库中存储它,这时候我们就需要创建类型转换器。

public class DateConverter {
    @TypeConverter
    public static Date revertDate(long value) {
        return new Date(value);
    }

    @TypeConverter
    public static long converterDate(Date value) {
        return value.getTime();
    }
}

在这个类中,我们使用了@TypeConverterconverterDateDate转换成数据库可以保存的类型,revertDate将数据库保存的值转换成Date

这样我们就可以使用该类了。

@Database(entities = {Department.class, Company.class}, version = 1, exportSchema = false)
@TypeConverters(DateConverter.class)
public abstract class DepartmentDatabase extends RoomDatabase {
   ...
}

如图,我们已经将Date插入到了数据库,并且通过查询拿出来。

除了将@TypeConverters放在RoomDatabase里面,还可以将它放在具体的Dao上面,但是这样只会影响到该Dao的方法。

通过@TypeConverters类型转换器,我们能够将非原始类型的值保存到数据库中。未完待续

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Jerry的SAP技术分享

如何计算CDS view里两个时间戳之间的天数间隔

有个需求:计算这两个时间戳之间的天数间隔,丢弃时间戳年-月-日8位后面的小时:分钟:秒。

643
来自专栏程序员的SOD蜜

实体类的枚举属性--原来支持枚举类型这么简单,没有EF5.0也可以

    通常,我们都是在业务层和界面层使用枚举类型,这能够为我们编程带来便利,但在数据访问层,不使用枚举类型,因为很多数据库都不支持,比如我们现在用的SqlSe...

20310
来自专栏龙渊阁测试精英

Jmeter(三十)_TimeShift函数在JSR223中的使用

日期 - 这是日期值。用于如果要通过添加或减去特定天数,小时或分钟来创建特定日期的情况。如果参数值未通过,则使用当前日期。

1113
来自专栏Ryan Miao

springmvc学习笔记--json--返回json的日期格式问题

(一)输出json数据 springmvc中使用jackson-mapper-asl即可进行json输出,在配置上有几点: 1.使用mvc:annotation...

36810
来自专栏学习力

《Java从入门到放弃》框架入门篇:springMVC数据传递

1254
来自专栏博岩Java大讲堂

Java日志体系(commons-logging)Java日志系统学习

4295
来自专栏张善友的专栏

MSBuild的简单介绍与使用

MSBuild 是 Microsoft 和 Visual Studio的生成系统。它不仅仅是一个构造工具,应该称之为拥有相当强大扩展能力的自动化平台。MSBui...

1905
来自专栏大内老A

Dora.Interception: 一个为.NET Core度身定制的AOP框架

多年从事框架设计开发使我有了一种强迫症,那就是见不得一个应用里频繁地出现重复的代码。之前经常Review别人的代码,一看到这样的程序,我就会想如何将这些重复的代...

2285
来自专栏跟着阿笨一起玩NET

对比MS Test与NUnit Test框架

项目中进行Unit Test时,肯定会用到框架,因为这样能够更快捷、方便的进行测试。

532
来自专栏西安-晁州

struts2随笔

1、struts.properties配置常量等同于struts.xml中配置(置于类加载路径下面) struts.multipart.maxSize文件上传最...

1890

扫码关注云+社区