<1>DbUtils-Create

来源:互联网 发布:淘宝看不到卖家中心 编辑:程序博客网 时间:2024/06/05 00:25

前言:本文源码截取自xUtils-2.6.14.jarhttp://download.csdn.net/detail/qq_25778369/9664552

1. 调用DbUtilscreate方法

db = DbUtils.create(ServiceManager.getInstance().getContext(),"temp.db");

 

2.

public staticDbUtilscreate(Context context,String dbName) {
    DaoConfig config = newDaoConfig(context);
    config.setDbName(dbName);
    return getInstance(config);
}

① New 一个DaoConfigjava Bean)对象,存储数据库名字,文件夹名字,等基本信息

② getIstance获得Dbutils对象

 

3.

private synchronized staticDbUtilsgetInstance(DaoConfig daoConfig) {
    DbUtils dao = daoMap.get(daoConfig.getDbName());
    if (dao ==null) {
        dao = newDbUtils(daoConfig);
        daoMap.put(daoConfig.getDbName(),dao);
    }else{
        dao.daoConfig= daoConfig;
    }

    // update the database if needed
    SQLiteDatabase database = dao.database;
    int oldVersion = database.getVersion();
    int newVersion = daoConfig.getDbVersion();
    if (oldVersion != newVersion) {
        if(oldVersion !=0) {
            DbUpgradeListener upgradeListener = daoConfig.getDbUpgradeListener();
            if (upgradeListener !=null) {
                upgradeListener.onUpgrade(dao,oldVersion,newVersion);
            }else{
                try{
                    dao.dropDb();
                }catch(DbException e) {
                    LogUtils.e(e.getMessage(),e);
                }
            }
        }
        database.setVersion(newVersion);
    }

    returndao;
}

 

① 检查daoMap缓存中是否有对应的dbUtils对象,没有,新建一个

② 做一个升级检查

 

4. 新建一个

private DbUtils(DaoConfig config) {
    if(config ==null) {
        throw newIllegalArgumentException("daoConfig may not be null");
    }
    this.database= createDatabase(config);
    this.daoConfig= config;
}

 

① Config检查,不能为空

② 根据填入的dbName新建一个database,存入DbUtils

③ 存储config,到daoConfig

 

5. 新建一个database

private SQLiteDatabase createDatabase(DaoConfig config) {
    SQLiteDatabase result = null;

    String dbDir = config.getDbDir();
    if (!TextUtils.isEmpty(dbDir)) {
        File dir = newFile(dbDir);
        if (dir.exists() || dir.mkdirs()) {
            File dbFile = newFile(dbDir,config.getDbName());
            result = SQLiteDatabase.openOrCreateDatabase(dbFile, null);
        }
    } else{
        result = config.getContext().openOrCreateDatabase(config.getDbName(),0, null);
    }
    returnresult;
}

 

可以看见最终是调用SQLiteDataBase来创建database对象的

 

6. 小结

DbUtils

daoConfig 存储config对象

database 存储 database对象

daoMap 缓存 dbUtils对象

0 0