美文网首页Android技术研究
Android orm框架Sugar1.4源码分析(DB创建篇)

Android orm框架Sugar1.4源码分析(DB创建篇)

作者: Android技术研究 | 来源:发表于2016-03-17 12:09 被阅读1035次

    Android技术研究原创如需转载请注明出处

    1、SugarContext.init(Context) 初始化的过程中包含SugarContext、SugarDb、ConcurrentMap对象的初始化

    代码如下:
    private SugarContext(Context context) {
    this.context = context;
    //初始化SugarDb
    this.sugarDb = new SugarDb(context);
    //初始化ConcurrentMap缓存信息
    this.entitiesMap = new MapMaker().weakKeys().makeMap();
    }

    初始化SugarDb代码:SugarDb继承SQLiteOpenHelper
    public SugarDb(Context context) {
    super(context,
    //根据注册文件中的配置获取数据库名
    ManifestHelper.getDatabaseName(context),
    //根据注册文件中的配置获取是否现实查询日志
    new SugarCursorFactory(getDebugEnabled(context)),
    //根据注册文件中的配置获取数据库版本
    getDatabaseVersion(context));
    //包含创建数据库,建表,删表,升级库等一些工具方法稍后解析
    schemaGenerator = new SchemaGenerator(context);
    }

    以上初始化工作都处理完毕,在调getReadableDatabase或getWritableDatabase时,会判断指定的数据库是否存在,不存在则调SQLiteDatabase.create创建, onCreate只在数据库第一次创建时才执行,开发人员无需再自己判断表是否存在。
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {
    //SchemaGenerator已经初始化过了,在数据库第一次创建的时候调用createDatabase
    schemaGenerator.createDatabase(sqLiteDatabase);
    }

    SchemaGenerator中创建数据库的方法
    public void createDatabase(SQLiteDatabase sqLiteDatabase) {
    //获取所有需要映射的domain,核心是通过配置文件中指定的包路径去获取
    List<Class> domainClasses = getDomainClasses(context);
    for (Class domain : domainClasses) {
    //根据每个domain遍历去创建表
    createTable(domain, sqLiteDatabase);
    }
    }

    //创建表核心代码,主要是根据传进来的domain中的属性进行组装


    Paste_Image.png

    相关文章

      网友评论

        本文标题:Android orm框架Sugar1.4源码分析(DB创建篇)

        本文链接:https://www.haomeiwen.com/subject/xpnqlttx.html