Android开发学习--Room

Room谷歌公司推出的数据库处理框架,给予sqlite,通过注解技术简化数据库操作

框架导入:

实体类-@Entity

import androidx.room.Entity;
import androidx.room.PrimaryKey;

@Entity
public class BookInfo {

    //主键(自动增长)
    @PrimaryKey(autoGenerate = true)
    private int id;

    private String bookName;
    private double price;
}

再加上get、set、toString方法

持久化类-@Dao

该类仅需编写接口,不需编写Impl实现类

支持可变参数("...")即传入多个参数

@Dao
public interface BookDao {
    @Insert
    void insert(BookInfo... book);     //添加,"..."表示支持可变参数,可以传入多个

    @Delete
    void delete(BookInfo... book);      //删除

    @Query("DELETE FROM BookInfo")
    void deleteAll();       //清空表

    @Update
    int update(BookInfo... book);       //修改

    @Query("select * from BookInfo")
    List<BookInfo> findAll();       //查询全部

    @Query("SELECT * FROM BookInfo WHERE bookName = :name ORDER BY id DESC limit 1")
    BookInfo findByName(String name);   //精准查询,只查一条
}

database抽象类

提供Dao的实例

//entities表示数据库有哪些表
//exportSchema是否对执行的sql语句做记录,保存至文件中
@Database(entities = {BookInfo.class},version = 1,exportSchema = true)
public abstract class BookDataBase extends RoomDatabase {

    public abstract BookDao bookDao();
}

指定sql语句文件保存位置:

在配置文件中,不同的后缀名格式有差:

 

在MyApplication构造database实例

1.声明一个database对象

2.在onCreate中通过Room.databaseBuilder构建数据库  

private BookDataBase bookDataBase;
//传入参数:上下文、数据库类、数据库名称
bookDataBase = Room.databaseBuilder(this,BookDataBase.class,"book")
        //允许迁移数据库(默认数据变更时,会删除原来的数据库再创建)
        .addMigrations()
        //允许在主线程中操作数据库(耗时)、通常/默认不允许在主线程中操作数据库
        .allowMainThreadQueries()
        .build();

MyApplication提供对外获取数据库实例的方法

public BookDataBase getBookDB(){
    return bookDataBase;
}

在activity中获取Dao实例,调用相关方法实现增删查改

//从APP实例中获取唯一的持久化对象
BookDao bookDao = myApplication.getInstance().getBookDB().bookDao();
//声明一个实体类对象
BookInfo book = new BookInfo();
//填充各字段信息
book.setBookName(name);
book.setPrice(Double.parseDouble(price));
//添加
bookDao.insert(book);

//查询并打印结果
        List<BookInfo> list = bookDao.findAll();
        for (BookInfo bookInfo: list) {
            Log.d("book",bookInfo.toString());
        }

//修改
        BookInfo bookInfo1 = new BookInfo();
        //查询到数据库原有的数据
        BookInfo b1 = bookDao.findByName(name);
        bookInfo1.setId(b1.getId());    //id不变
        //修改其他内容
        bookInfo1.setBookName(name);
        bookInfo1.setPrice(Double.parseDouble(price));
        bookDao.update(bookInfo1);

//删除--根据id删除
        BookInfo bookInfo = new BookInfo();
        BookInfo b1 = bookDao.findByName(name);
        bookInfo.setId(b1.getId());
        bookDao.delete(bookInfo);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值