前言
本系列将从无到有一步步解析Room源码。解析过程中,我们始终不要记住,Room其实是对Sqlite的增删改查。只不过加了自己的很多思想去润色。
正文
解析顺序,本系列将根据以下系列解说Room源码架构:
-
涉及最基础的Sqlite增删改查(Room使用到的增删改查)和对Sqlite的封装(Androidx的Sqlite架构)
-
当前demo为主线涉及到的Room源码主线部分解说;
-
Room compiler代码生成部分源码解说,以及对Room注解根据源码写一个使用文档;
- room-compiler中androidx.room.parser中的SQLite 文件是如何生成的简单理解一下
- Room从架构层面分析;
Sqlite增删改查
如果对SQLite的应用不了解,没办法对Room进行解析。
说明一下几个关于数据库类的关系
SQLitDatabase家族部分成员,相关类的说明如下(除了下面以外,没做解释的可以不用看,和Room没啥多大关系):
-
SQLiteOpenHelper是一个帮助(Utility)类,用于方便开发者创建和管理数据库。
-
SQLiteDatabase代表SQLite数据库,它内部封装了一个Native层的sqlite3实例。
-
SQLiteStatement用于描述和SQL语句相关的信息。
-
SQLiteProgram是基类,它提供了一些API用于参数绑定。
-
SQLiteQuery主要用于query查询操作,而SQLiteStatement用于query之外的一些操作(根据SDK的说明,如果SQLiteStatement用于query查询,其返回的结果集只能是1行*1列)。
demo应用
当前数据库存在demo.db数据库文件中,一个用户表users:userid和username两个字段,userid表示主键。实现如下:
-
创建数据库文件,并获取SQLiteDatabase数据库对象:
public class OpenHelper extends SQLiteOpenHelper{ final Context mContext; public OpenHelper(Context context, String name,int version){ super(context,name,null,version); mContext = context; } public SQLiteDatabase getSQLiteDatabase(boolean writele){ String name = getDatabaseName(); if (name != null) { //数据库文件如果不存在,那么新建 File databaseFile = mContext.getD