Android-Room数据库的使用方法教程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android-Room数据库的使用方法教程
Room是一个持久性数据库,提供了SQLite的抽象层,以便在充分利用SQLite的同时允许流畅的数据库访问。这篇文章主要介绍了详细介绍Android-Room数据库的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧。
为什么会选择Room?
前面我也说到了现在也有不少开源的数据库给大家使用,那为什么我们还要去学习使用这个库呢?当然不是我前面说的“正不正统”的原因了。
因为Room有下面几个优点:
①SQL查询在编译时就会验证- 在编译时检查每个@Query和@Entity等,这就意味着没有任何运行时错误的风险可能会导致应用程序崩溃(并且它不仅检查语法问题,还会检查是否有该表)
②较少的模板代码
③与LiveData 集成
该如何使用它?
1、在app/build.gradle中添加以下依赖
implementation 'android.arch.persistence.room:runtime:1.0.0'
annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'
你可以点击这里查看最新依赖版本号
2、创建JavaBean
@Entity
public class User {
@PrimaryKey(autoGenerate = true)//主键是否自动增长,默认为false
private int id;
private String name;
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) { = name;
}
public int getAge() {
return age;
}
public void setAge(int age) { this.age = age;
}
//这里的getter/setter方法是必须的
}
这里需要使用@Entity 来注解该类
至少要有一个主键@PrimaryKey
3、创建Dao
接下来,需要为我们的实体创建DAO。DAO代表数据访问对象,所以它是告诉我们的数据库如何操作数据的一种方式:
@Dao
public interface UserDao {
@Query("SELECT * FROM user")
List getAllUsers();
@Insert
void insert(User... users);
@Update
void update(User... users);
@Delete
void delete(User... users);
}
使用@Dao 注解该接口
@Insert , @Update , @Delete , @Query 代表我们常用的插入、更新、删除、查询数据库操作
@Insert , @Update , @Delete 可以传入多种不同的参数。例如:
@Insert
void insert(User... users);
@Insert
void insert(User user);
@Insert
void insert(List userLists);
同理,@Query 也可以返回多种不同的类型。
@Query("SELECT * FROM user")
List getAllUsers();
@Query("SELECT * FROM user WHERE id=:id")
User getUser(int id);
@Query("SELECT * FROM user")
Cursor getUserCursor();
当然,除了这些我们还可以传入一些限制符进去。例如,
@Query("SELECT * FROM user WHERE age=:age")
List getUsersByAge(int age);
@Query("SELECT * FROM user WHERE age=:age LIMIT :max")
List getUsersByAge(int max, int... age);
4、创建数据库
@Database(entities = { User.class }, version = 1,exportSchema = false)
public abstract class UserDatabase extends RoomDatabase {
private static final String DB_NAME = "UserDatabase.db";
private static volatile UserDatabase instance;
static synchronized UserDatabase getInstance(Context context) {
if (instance == null) {
instance = create(context);
}
return instance;
}