Andriod使用 Room 将数据保存到本地数据库

文章目录

  • 数据表增删改查
    • 1.增加
    • 2.删除
    • 3.修改
    • 4.查询
  • 数据库创建
  • 数据库升级

数据表增删改查

此博客仅为学习博客,参考网上资料所得

1.增加

@Insert(onConflict = OnConflictStrategy.REPLACE)
OnConflictStrategy.REPLACE表如已有数据,就覆盖掉。数据的判断通过主键进行匹配,也就是id,非整个EquipType对象。增加分为两种,一种是增加一条、另外一种是增加多条数据

    //返回Long数据表示,插入条目的主键值(id)
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    Long insert(EquipType equipType);
    //返回List数据表示被插入数据的主键id列表
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    List insertAll(List equipTypeList);

2.删除

删除就比较简单了,直接添加注解返回int处理成功条数即可

 @Delete
    int delete(EquipType equipType);
 
 @Delete
    int deleteAll(List equipTypeList);

3.修改

修改也一样,需要传入修改完的实体类,其中必须要有主键(通过主键来进行修改)

@Update()
    int update(EquipType equipType);
 
@Update()
    int updateAll(EquipType... equipTypes);
 

4.查询

@Query(“SELECT * FROM equip_type”)
查询灵活性就很大了,可以直接里面写sql语句。很赞的是:Room可以直接判断你写的表名是否存在,还和参数值一一对应。

@Query("SELECT * FROM equip_type")
    List getAll();
 
    //参数cid和注解中的cid相对应  注解中的equip_type和id和实体类中的相对应
@Query("SELECT * FROM equip_type WHERE id = :cid")
    LiveData findByUid(int cid);

数据库创建

需要继承自RoomDatabase。实现如下:


/**
 * @author jiang zhu on 2019/11/12
 */
//注解指定了database的表映射实体数据以及版本等信息
@Database(entities = {EquipType.class}, version = 1)
public abstract class ZhuDatabase extends RoomDatabase {
    //RoomDatabase提供直接访问底层数据库实现,我们通过定义抽象方法返回具体Dao
    //然后进行数据库增删该查的实现。
    public abstract EquipTypeDao equipTypeDao();
}

需要在创建的类的上面添加@Database注解,其中的entities是一个数组,可以添加多个类,相应的在下面可以创建多个抽象方法(多个表的情况下),以便使用。

接下来需要创建数据库了

//得到ZhuDatabase 对象
 private var db : ZhuDatabase? = null
 //得到Dao对象
 private var equipTypeDao : EquipTypeDao? = null
 
private fun initData() {
        db = Room.databaseBuilder(
            applicationContext,
            ZhuDatabase::class.java, "room-database"
        )
            //添加数据库变动迁移
            //.addMigrations(AppDatabase.MIGRATION_1_2)
            //默认设置为不可在主线程执行,需要重新开启线程
            // .allowMainThreadQueries()
            .build()
        equipTypeDao = db!!.equipTypeDao()
    }

数据库升级

这里已经完成了数据库的基本操作,上面也提到了数据库的变动迁移,在ZhuDatabase中定义方法进行操作即可,下面是代码示例:

//数据库变动添加Migration
    public static final Migration MIGRATION_1_2 = new Migration(1, 2) {
        @Override
        public void migrate(SupportSQLiteDatabase database) {
            //数据库的具体变动
            //类型是integer,不为空,默认值是0
            database.execSQL("ALTER TABLE equip_type "
                    + " ADD COLUMN number INTEGER NOT NULL DEFAULT 0");
        }
    };

Demo实例

你可能感兴趣的:(参考学习)