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(七)
- XUtil学习之DBUtil(六)
- XUtil学习之DBUtil(七)
- XUtil学习之DBUtil(八)
- XUtil学习之DBUtil(九)
- XUtil学习之DBUtil(十)
- XUtil学习之DBUtil(十一)
- XUtil学习之DBUtil(十二)
- XUtil学习笔记之ViewUtils(二)
- XUtil学习之ViewFinder(三)
- XUtil学习之ViewInjectInfo(四)
- XUtil学习之ResLoader(五)
- DBUtil教程(六)HBase基础查询支持
- JavaWeb系列之十四(DBUtil)
- Xutil
- XUtil
- xutil
- JDBC优化之路-2(添加工具类DBUtil)
- DBUtil(传统模式)
- javascript 混合的构造函数和原型方式,动态原型方式
- mysql 取出最后一条记录中某个字段值
- 外部排序相关算法知识
- python django的cache配置
- JIT注册表设置位置
- XUtil学习之DBUtil(六)
- ios数组最大值,最小值,平均值,和的快速算法
- 域名 (拼接得到域名,即根目录。有时候,现在的根目录是admin下的,需要返到上一级
- 运营商与四大骨干网关系
- Jedis分片连接池(分布式)
- 高性能Mysql——InnoDB与Myisam
- Think Python:Chapter 3: Functions 的笔记
- ASCII栅格的显示
- 公钥和私钥