发布网友 发布时间:2023-03-11 03:26
共1个回答
热心网友 时间:2023-10-14 06:11
首先了解一下DbUtils的框架结构,总体来看分为7个部分: 1、create instance(创建实例) 2、operations(操作部分) 3、config(配置) 4、private operations with out transaction(无业务的操作) 5、tools(工具) 6、exec sql(sql执行) 7、temp cache(临时缓存)
其中在创建数据库的时候提供了5种构造方法
(1)通过传入上下文创建DB,这种情况下使用的是系统默认的配置
dbName = xUtils.db, dbVersion = 1;
public static DbUtils create(Context context) {
DaoConfig config = new DaoConfig(context);
return getInstance(config);
}
(2)通过传入上下文和dbName,根据用户指定的dbName生成数据库
public static DbUtils create(Context context, String dbName) {
DaoConfig config = new DaoConfig(context);
config.setDbName(dbName);
return getInstance(config);
}
(3) 通过传入上下文 、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);
}
(4) 通过传入上下文 、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);
}
(5) 通过传入上下文 、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);
}
5种方法怎么选择呢?我们看下用于配置数据库的5个属性
private Context context; //上下文
private String dbDir;//数据库存储路径
private String dbName = “xUtils.db”; // 数据库名称
private int dbVersion = 1; //版本号
private DbUpgradeListener dbUpgradeListener;//*
为了方便我们后期查找,一般会选择第三种构造方法,指定上下文,指定数据库的名称,指定数据库存储路径,大多数情况这是没有问题的,但是Android6.0和以前的版本相比,对存储路径做了修改,所以根据Android4.X/5.X给出的指定存储路径不适用于6.0版本,创建数据库失败,就出现的文章开头的错误,获取数据库版本号失败。
找到了问题所在,那么解决起来就相对简单了,只要选择第一种构造方法,指定上下文,其他属性根据系统自动适配就可以了。
其实还有一种相对简单的解决方法,作为手机端,大部分数据都是从服务器获取的,在数据量不是很大的情况下,并不需要去生成数据库,可以在获取数据后,只做一个简单的缓存,保存到集合中,如List,map等,大多数页面现在都是这样实现的。