XUtil学习之DBUtil(六)

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(七)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值