Android-Room数据库(介绍)
Android-Room数据库-多表查询
Android—Room 数据库迁移(Migration)
Android — Room 数据库跳跃式升级(Migration)
前言
通常情况下,数据库存储的是基本类型float
,int
,String
等。但是有时需要存储自定义类型,比如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();
}
}
在这个类中,我们使用了
@TypeConverter
,converterDate
将Date
转换成数据库可以保存的类型,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
类型转换器,我们能够将非原始类型的值保存到数据库中。未完待续