Room数据库简单使用

Room 数据保存简单使用

一、说明

Room是一个SQLite抽象层,使用更加简单,通过注解的方式标记相关功能,编译时自动生成响应的 impl 实现类,具有丰富的编译时校验,错误提示。

类注解:

  • @Entity:映射为数据库中的一张表。
  • @Dao:即 Data Access Objects,数据访问对象。
  • @Database:数据库,标注的类必须是抽象类,在注解中添加与数据库关联的表,包含使用 @Dao 注解标记的类的抽象方法。

类内注解:

  • @PrimaryKey():标识主键。
  • @NonNull:字段非空标识。
  • @ColumnInfo(“XXX”):字段名。
  • @Insert():插入方法。
  • @Query():查询方法。
  • @Delete:删除方法。
  • @Ignore:忽视该方法或字段。

二、使用

  1. 添加依赖
    在官网找合适版本的依赖。(Room 依赖极易出错)
  2. 使用注解自定义实体类
@Entity(tableName = "fruit")
public class Fruit {

    @PrimaryKey(autoGenerate = true)
    public Integer id;
    @ColumnInfo(name = "fruit_name")
    public String fruitName;
    @ColumnInfo(name = "fruit_type")
    public String fruitType;
    @ColumnInfo(name = "fruit_price")
    public Integer fruitPrice;
    @ColumnInfo(name = "fruit_num")
    public Integer fruitNum;

    @Ignore
    public Fruit(Integer id, String fruitName, String fruitType, Integer fruitPrice, Integer fruitNum) {
        this.id = id;
        this.fruitName = fruitName;
        this.fruitType = fruitType;
        this.fruitPrice = fruitPrice;
        this.fruitNum = fruitNum;
    }
    public Fruit() {
    }
}
  1. 自定义 Dao 接口
@Dao
public interface MyDAO {
    /**参数可为List**/
    //返回插入的 rowId 值,long 型
    @Insert
    long insertFruit(Fruit fruit);

    //返回受影响的行数
    @Delete
    int deleteFruit(Fruit fruit);

    //返回受影响的行数
    @Update(entity = Fruit.class)
    int updateFruit(Fruit fruit);

    //返回查询的数据
    @Query("select * from fruit;")
    List<Fruit> selectAllFruit();
}
  1. 自定义 Database 抽象类
@Database(version = 1,entities = {Fruit.class},exportSchema = false)
public abstract class MyDatabase extends RoomDatabase {
    public abstract MyDAO myDAO();
}
  1. 在想要的位置进行数据库的操作,该位置需要拥有上下文 Context
//获取 Dao,与数据库进行操作
MyDatabase database = Room.databaseBuilder(getApplicationContext(),MyDatabase.class,"database-name").build();
MyDAO dao = database.myDAO();

    //添加 Fruit
    dao.insertFruit(new Fruit(1,"橘子","橘子",10,120));

    //查找 Fruit
    List<Fruit> fruits = dao.selectAllFruit();

    Fruit fruit = new Fruit();
     if(fruits.size() > 0){
        fruit = fruits.get(0);
    }
    Log.i(TAG,"初始数据库中Fruit为:" + fruit );

    //修改 Fruit
    fruit.setFruitName("苹果");
    fruit.setFruitType("苹果");
    dao.updateFruit(fruit);

    //查找 Fruit
    List<Fruit> fruitList = dao.selectAllFruit()

    Fruit f = new Fruit();
    if(fruits.size() > 0){
        fruit = fruits.get(0);
    }
    Log.i(TAG,"修改后的数据 Fruit 为:" + f);

    //删除 Fruit
    dao.deleteFruit(f);

    //查找 Fruit
    List<Fruit> list = dao.selectAllFruit();

    Fruit fi = new Fruit();
    if(fruits.size() > 0){
        fruit = fruits.get(0);
    }
    Log.i(TAG,"删除后数据库中Fruit为:" + fi );

相关文章

学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习...
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面...
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生...
Can’t connect to local MySQL server through socket \'/v...
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 ...
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服...