Android-Room自定义类型

作者: Kotyo | 来源:发表于2018-03-13 23:34 被阅读2236次

    Android-Room数据库(介绍)

    Android-Room数据库-多表查询

    Android—Room 数据库迁移(Migration)

    Android — Room 数据库跳跃式升级(Migration)

    前言

    通常情况下,数据库存储的是基本类型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类型转换器,我们能够将非原始类型的值保存到数据库中。未完待续

    相关文章

      网友评论

        本文标题:Android-Room自定义类型

        本文链接:https://www.haomeiwen.com/subject/qwiafftx.html