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 条评论
登录 后参与评论

相关文章

来自专栏落花落雨不落叶

canvas画简单电路图

62111
来自专栏张善友的专栏

LINQ via C# 系列文章

LINQ via C# Recently I am giving a series of talk on LINQ. the name “LINQ via C...

2645
来自专栏张善友的专栏

Silverlight + Model-View-ViewModel (MVVM)

     早在2005年,John Gossman写了一篇关于Model-View-ViewModel模式的博文,这种模式被他所在的微软的项目组用来创建Expr...

2968
来自专栏杨龙飞前端

scrollto 到指定位置

2514
来自专栏大内老A

The .NET of Tomorrow

Ed Charbeneau(http://developer.telerik.com/featured/the-net-of-tomorrow/) Exciti...

31810
来自专栏闻道于事

js登录滑动验证,不滑动无法登陆

js的判断这里是根据滑块的位置进行判断,应该是用一个flag判断 <%@ page language="java" contentType="text/html...

6848
来自专栏一个会写诗的程序员的博客

Spring Reactor 项目核心库Reactor Core

Non-Blocking Reactive Streams Foundation for the JVM both implementing a Reactiv...

2182
来自专栏我和未来有约会

Kit 3D 更新

Kit3D is a 3D graphics engine written for Microsoft Silverlight. Kit3D was inita...

2536
来自专栏pangguoming

Spring Boot集成JasperReports生成PDF文档

由于工作需要,要实现后端根据模板动态填充数据生成PDF文档,通过技术选型,使用Ireport5.6来设计模板,结合JasperReports5.6工具库来调用渲...

1.2K7
来自专栏张善友的专栏

Mix 10 上的asp.net mvc 2的相关Session

Beyond File | New Company: From Cheesy Sample to Social Platform Scott Hansel...

2577

扫码关注云+社区