Android Room牛刀小试

本文介绍了Android的Room数据库,它提供了一个SQLite的抽象层,简化了数据库访问。文章详细讲解了Room的优点,如何添加依赖,以及核心的三要素:Dao、Entity和Database。还通过示例代码展示了如何使用RxJava2进行数据库操作,并处理可能遇到的问题。
摘要由CSDN通过智能技术生成

Room在SQLite之上提供了一个抽象层来访问数据库,可以在充分利用SQLite强大功能的同时对数据库进行流畅的访问。

优点
  • 减少了写大量代码来在SQL查询和Java数据对象之间进行转换。
  • 数据层改变自动更新SQL查询。减少了查询过程的耗时。
使用

添加依赖

compile "android.arch.persistence.room:runtime:1.0.0-beta1"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0-beta1"

可能发生的错误

Error:Failed to resolve: android.arch.persistence.room:runtime:1.0.0-beta1
Error:Failed to resolve: annotationProcessor

解决办法:
往工程级别下的gradle文件里添加google的maven仓库

allprojects {
    repositories {
        jcenter()
        maven {
            url 'https://maven.google.com'
        }
    }
}
Room三要素:
  • Dao:用来处理数据库操作,如增删改查,编译的时候会生成_impl结尾的实现类,实现在DAO中定义的增删改查方法
  • Entity:实体类,一个实体类对应一张表
  • Database:作为底层连接数据库的主要接入点,它是一个抽象的类,并继承RoomDatabase,编译的时候会自动生成一个_impl结尾的实现类,实现数据库以及表的创建及打开
代码:

Tips:这里使用了RxJava2.0里的Completable以及Maybe用来处理数据库操作,以及ui更新。
为什么用Maybe不用Single?Maybe是发送0个或1个数据,而single是发送一个数据并且结果要么成功要么错误抛异常。

创建一个DAO接口,这个接口主要是提供数据库增删改查方法,编译的时候会生成一个BookDao_Impl的实现类:
BookDao.java

@Dao
public interface BookDao {
   
    //这里使用Maybe
    @Query("SELECT * FROM book")
    Maybe<List<Book>> getAllBooks();

    @Query("SELECT * FROM book where bookid = :id")
    Maybe<Book> getBookById(int id);

    @Insert
    void insertAll(Book... books);

    @Delete
    void delete(Book book);

    @Update
    void updateBooks(Book... books);
}

Entity: 一个实体类对应一张表
Book.java

@Entity(tableName = "book")
public class Book {
   
    @PrimaryKey(autoGenerate = true)
    private int bookid;

    @ColumnInfo(name = "book_name")
    private String bookName;

    @ColumnInfo(name = "author")
    private String author;

    public void setAuthor(String author) {
        this.author = author;
    }

    public String getAuthor() {
       
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值