XUtil学习之DBUtil(六)

来源:互联网 发布:linux查看cpu运行状态 编辑:程序博客网 时间:2024/06/06 12:58

DBUtil是XUtil框架的核心类之一,那么既然是核心类,那么就会有很多问题需要去探究。
1、DBUtil所涉及到的数据库的增删改查以及底层的代码到底是怎么实现的呢?
2、关会使用DBUtil是不够的,要知道DBUtil到底哪些地方方便了我们操作数据库,是怎样做到的?
3、学习XUtil的思维方式,书写规范等。
废话一堆,我们就正式进入DBUtil的学习吧!

打开DBUtil的类,先从总体来看,作者给我们把这个拥有800多行代码的类,分为了7部分,分别是
1、create instance(创建实例)
2、operations(操作部分)
3、config(配置)
4、private operations with out transaction(无业务的操作)
5、tools(工具)
6、exec sql(sql执行)
7、temp cache(临时缓存)

我们一次开始学习
一、create instance

1、作者首先实现了一个带参的构造方法,需要传入DaoConfig,代码如下:
     private DbUtils(DaoConfig config) {        if (config == null) {            throw new IllegalArgumentException("daoConfig may not be null");        }        this.database = createDatabase(config);        this.daoConfig = config;    }

其中,DaoConfig是数据库的配置类,即全文的第三部分–config(配置),这块会在config(配置)里具体讲解。
2、作者提供了几种创建数据库的方式
(1)上文使用的是通过DaoConfig创建,具体代码如下:

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

配置中 包括以下4个属性,用于配置数据库
private Context context;
private String dbName = “xUtils.db”; // default db name
private int dbVersion = 1;
private DbUpgradeListener dbUpgradeListener;
(2)通过传入上下文创建DB,这种情况下使用的是系统默认的配置
dbName = xUtils.db, dbVersion = 1;

  public static DbUtils create(Context context) {        DaoConfig config = new DaoConfig(context);        return getInstance(config);    }

(3)通过传入上下文和dbName,根据用户指定的dbName生成数据库

public static DbUtils create(Context context, String dbName) {        DaoConfig config = new DaoConfig(context);        config.setDbName(dbName);        return getInstance(config);    }

(4) 通过传入上下文 、dbDir、dbName,根据用户指定的dbName在dbDir位置生成数据库

 public static DbUtils create(Context context, String dbDir, String dbName) {        DaoConfig config = new DaoConfig(context);        config.setDbDir(dbDir);        config.setDbName(dbName);        return getInstance(config);    }

(5) 通过传入上下文 、dbName,dbVersion、dbUpgradeListener根据用户指定的dbName生成dbVersion版的数据库

 public static DbUtils create(Context context, String dbName, int dbVersion, DbUpgradeListener dbUpgradeListener) {        DaoConfig config = new DaoConfig(context);        config.setDbName(dbName);        config.setDbVersion(dbVersion);        config.setDbUpgradeListener(dbUpgradeListener);        return getInstance(config);    }

(6) 通过传入上下文 、dbName,dbVersion、dbUpgradeListener,根据用户指定的dbName生成dbVersion的数据库 ,指定监听器

public static DbUtils create(Context context, String dbDir, String dbName, int dbVersion, DbUpgradeListener dbUpgradeListener) {        DaoConfig config = new DaoConfig(context);        config.setDbDir(dbDir);        config.setDbName(dbName);        config.setDbVersion(dbVersion);        config.setDbUpgradeListener(dbUpgradeListener);        return getInstance(config);    }

3、获取DbUtils的getInstance方法

private synchronized static DbUtils getInstance(DaoConfig daoConfig) {        DbUtils dao = daoMap.get(daoConfig.getDbName());        if (dao == null) {            dao = new DbUtils(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);        }        return dao;    }

4、设置configDebug调试

  public DbUtils configDebug(boolean debug) {        this.debug = debug;        return this;    }

5、配置是否configAllowTransaction

  public DbUtils configAllowTransaction(boolean allowTransaction) {        this.allowTransaction = allowTransaction;        return this;    }

6、获取当前数据库 getDatabase()

 public SQLiteDatabase getDatabase() {        return database;    }

7、获取DaoConfig

  public DaoConfig getDaoConfig() {        return daoConfig;    }

接着看 XUtil学习之DBUtil(七)

0 0
原创粉丝点击