android开发步步为营之109:好框架推荐android xutils之dbutils

    xiaoxiao2025-01-07  12

    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

    转载请注明原文地址: https://ju.6miu.com/read-1295228.html
    最新回复(0)