XUtils好像是一个中国程序猿写的开源框架,挺不错的,我们项目里面有用他的DbUtils,封装了系统自带的Sqlite的用法。这里介绍下DbUtils的常用用法。
XUtils项目地址:https://github.com/wyouflf/xUtils
DbUtils常用用法
DbUtils mDb;
public static final String DB_NAME = "main";
public static final int DB_VERSION = 2;//通过更改版本号升级数据库
// 创建DbUtils实例
public DbUtils getDb() {
if (mDb != null)
return mDb;
synchronized (this) {
try {
if (mDb != null)
return mDb;
DbUtils db = DbUtils.create(mContext.getApplicationContext(), DB_NAME, DB_VERSION, new DbUtils.DbUpgradeListener() {
@Override
public void onUpgrade(DbUtils db, int oldVersion, int newVersion) {
onUpgrade(db, oldVersion, newVersion);
}
});
db.configAllowTransaction(true);
db.configDebug(BuildConfig.DEBUG);
mDb = db;
return mDb;
} catch (Exception e) {
return null;
}
}
}
public static void onUpgrade(DbUtils db, int oldVersion, int newVersion) {
try {
if (!db.tableIsExist(SkinPackageRecord.class))
return;
SqlInfo sqlInfo = DbUtil.createAlterTableSql(db, SkinPackageRecord.class);
if (sqlInfo == null)
return;
log.info("SkinPackageRecord upgrade:" + " sql:" + sqlInfo.getSql());
db.execNonQuery(sqlInfo.getSql());
} catch (Exception e) {
log.error("onUpgrade: ", e);
}
}
DbUtils db = DbUtils.create(this);
User user = new User(); //这里需要注意的是User对象必须有id属性,或者有通过@ID注解的属性
user.setEmail("test@qq.com");
user.setName("test");
//增
db.save(user); // 使用saveBindingId保存实体时会为实体的id赋值
db.saveOrUpdate(user);
//删
db.delete(User.class, WhereBuilder.b("name", "=", name));
//改
db.update(user,"email");
// 查
Parent entity = db.findById(Parent.class, parent.getId());
List<Parent> list = db.findAll(Parent.class);//通过类型查找
Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","=","test"));
// IS NULL
Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","=", null));
// IS NOT NULL
Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","!=", null));
// WHERE id<54 AND (age>20 OR age<30) ORDER BY id LIMIT pageSize OFFSET pageOffset
List<Parent> list = db.findAll(Selector.from(Parent.class)
.where("id" ,"<", 100)
.and(WhereBuilder.b("age", ">", 20).or("age", " < ", 30))
.orderBy("id")
.limit(pageSize)
.offset(pageSize * pageIndex));
// op为"in"时,最后一个参数必须是数组或Iterable的实现类(例如List等)
Parent test = db.findFirst(Selector.from(Parent.class).where("id", "in", new int[]{1, 2, 3}));
// op为"between"时,最后一个参数必须是数组或Iterable的实现类(例如List等)
Parent test = db.findFirst(Selector.from(Parent.class).where("id", "between", new String[]{"1", "5"}));
DbModel dbModel = db.findDbModelAll(Selector.from(Parent.class).select("name"));//select("name")只取出name列
List<DbModel> dbModels = db.findDbModelAll(Selector.from(Parent.class).groupBy("name").select("name", "count(name)"));
List<DbModel> dbModels = db.findDbModelAll(sql); // 自定义sql查询
db.execNonQuery(sql) // 执行自定义sql