room的基本使用

第一步引入依赖并配置defaultConfig
**implementation “androidx.room:room-runtime:2.2.5”
annotationProcessor “androidx.room:room-compiler:2.2.5”

javaCompileOptions {
        annotationProcessorOptions {
            arguments = ["room.schemaLocation":
                                 "$projectDir/schemas".toString()]
        }
    }**

    第二步创建实体属性类Emperor
    ****public class Emperor {
//PrimaryKey主键,autoGenerate自增长
@PrimaryKey(autoGenerate = true)
//ColumnInfo用于指定该字段存储在表中的名字,并指定类型
@ColumnInfo(name = "id", typeAffinity = ColumnInfo.INTEGER)
public int id;
@ColumnInfo(name = "emperor_name", typeAffinity = ColumnInfo.TEXT)
public String name;
@ColumnInfo(name = "image", typeAffinity = ColumnInfo.TEXT)
public String image;
@ColumnInfo(name = "age", typeAffinity = ColumnInfo.TEXT)
public String age;
//Room默认使用这个构造方法操作数据
public Emperor(int id, String name, String age,String image) {
    this.id = id;
    this.name = name;
    this.age = age;
    this.image=image;
}

}****

第三步创建DAO类
//插入数据
@Insert
public void insertEmperor(Emperor… emperor);

//删除数据
@Delete
public void deleteEmperor(Emperor... emperor);


//修改数据
@Update
public void updateEmperor(Emperor... emperor);


//根据条件查询唯一的一个
@Query("SELECt * FROM emperor_table WHERE id=:id")
public Emperor queryEmperorById(int id);

//根据条件查询多个数据
@Query("SELECt * FROM emperor_table WHERE age=:age")
public List<Emperor> queryEmperorsByAge(String age);


//不设置条件,查询所有数据
@Query("SELECt * FROM emperor_table")
public List<Emperor> queryEmperors();

第四步创建DataBase
@Database(entities = {Emperor.class}, version = 3)
public abstract class MyDatabase extends RoomDatabase {

private static final String DATABASE_NAME = "emperor_db";

private static MyDatabase databaseInstance;

//结合单例模式完成创建数据库实例
public static synchronized MyDatabase getDatabaseInstance(Context context) {
    if (databaseInstance == null) {
        databaseInstance = Room.databaseBuilder(context.getApplicationContext(), MyDatabase.class, DATABASE_NAME).allowMainThreadQueries().build();
    }
    return databaseInstance;
}

//将第四步创建的Dao对象以抽象方法的形式返回
public abstract EmperorDao getEmperorDao();

}

第五步使用
dao = MyDatabase.getDatabaseInstance(getContext()).getEmperorDao();
for(int i=1;i<=dao.queryEmperors().size();i++) {
Emperor sunQuan = dao.queryEmperorById(i);
String name = sunQuan.name;
String age = sunQuan.age;
int image = Integer.valueOf(sunQuan.image);
MessageEvent messageEvent = new MessageEvent(name, image, age);
messageEventList.add(messageEvent);
}

注意点由Eventbus传递过来的封装实体会有两个连续的item
处理bug
在接收事件中遍历数据库若无则插入,具体代码为
boolean ischeck=true;
for(int i=1;i<dao.queryEmperors().size();i++){
if (title.equals(dao.queryEmperorById(i).name)){
ischeck=false;
}
}
if(ischeck==true){
MessageEvent messageEvent=new MessageEvent(title,image,content);
messageEventList.add(messageEvent);
dao.insertEmperor(caoCao);
}

//保留连续项中的一个
for(int i=0;i<messageEventList.size()-1;i++){
if(messageEventList.get(i).getTitle().equals(messageEventList.get(i+1).getTitle())){
messageEventList.remove(i);
}
}

    在onActivity中将数据库已有的数据传递给实体类
     **dao = MyDatabase.getDatabaseInstance(getContext()).getEmperorDao();
    for(int i=1;i<=dao.queryEmperors().size();i++) {
        Emperor sunQuan = dao.queryEmperorById(i);
        String name = sunQuan.name;
        String age = sunQuan.age;
        int image = Integer.valueOf(sunQuan.image);
        MessageEvent messageEvent = new MessageEvent(name, image, age);
        messageEventList.add(messageEvent);
    }

for(int i=0;i<messageEventList.size()-1;i++){
if(messageEventList.get(i).getTitle().equals(messageEventList.get(i+1).getTitle())){
messageEventList.remove(i);
}
}**
https://blog.csdn.net/danceinkeyboard/article/details/111938810?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值