Kiba518

Kiba518

三线城市架构师一枚。

Fork me on GitHub

xUtils3的使用教程

首先在build.gradle下的dependencies下添加引用。

implementation 'org.xutils:xutils:3.3.36'

然后创建一个表实体。

package com.kiba.learn;
​
import org.xutils.db.annotation.Column;
import org.xutils.db.annotation.Table;
​
​
@Table(name = "Cache_User", onCreated = "CREATE UNIQUE INDEX index_name ON Cache_User(id)")
public class Cache_User {
​
    @Column(name = "id", isId = true)
    private int id;
​
    @Column(name = "realId")
    public int realId;
​
    @Column(name = "name")
    public String name;
​
    @Column(name = "loginName")
    public String loginName;
​
    @Column(name = "password")
    public String password;
​
​
    public String getLoginName() {
        return loginName;
    }
​
    public void setLoginName(String loginName) {
        this.loginName = loginName;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public int getId() {
        return id;
    }
​
    public void setId(int id) {
        this.id = id;
    }
​
    public int getRealId() {
        return realId;
    }
​
    public void setRealId(int realId) {
        this.realId = realId;
    }
​
    public String getPassword() {
        return password;
    }
​
    public void setPassword(String password) {
        this.password = password;
    }
}

然后使用InitDatabaseConfig函数配置daoConfig。

然后使用db = x.getDb(daoConfig)获取数据库管理对象。

然后编写CacheLoginInfo()函数,里面可以写一些测试数据库的新建,更新,查询。

DbManager db;
 public DbManager.DaoConfig daoConfig;
    //返回值【/storage/emulated/0/Android/data/com.kiba.learn/files】
 public String  FilesPath_External;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FilesPath_External = getExternalFilesDir("").getAbsolutePath();
        InitDatabaseConfig();
        db = x.getDb(daoConfig);
        CacheLoginInfo();
  }
  public void InitDatabaseConfig(){
        File file=new File(FilesPath_External,"database");
​
        daoConfig = new DbManager.DaoConfig()
                .setDbName("kiba.db")
                .setDbDir(file) // 不设置dbDir时, 默认存储在app的私有目录.
                .setDbVersion(1)
                .setDbOpenListener(new DbManager.DbOpenListener() {
                    @Override
                    public void onDbOpened(DbManager db) {
                        // 开启WAL, 对写入加速提升巨大
                        db.getDatabase().enableWriteAheadLogging();
                    }
                })
                .setDbUpgradeListener(new DbManager.DbUpgradeListener() {
                    @Override
                    public void onUpgrade(DbManager db, int oldVersion, int newVersion) {
                        // TODO: ...
                        // db.addColumn(...);
                        // db.dropTable(...);
                        // ...
                        // or
                        // db.dropDb();
                    }
                });
    }

这里因为我们只使用xUtils3的数据库,所以不用对视图进行注入,即不用写下面这个代码。

x.view().inject(this);
x.Ext.setDebug(false); //输出debug日志,开启会影响性能

如果要触发dbUpgradeListener升级数据库,可以使用下面代码。

InitDatabaseConfig();
DbManager db = x.getDb(daoConfig);
// 升级数据库从版本3到版本4,并触发setDbUpgradeListener
daoConfig.getDbUpgradeListener().onUpgrade(db,3,4);

也可以直接删除数据,后面使用时会重新创建。

 try {
      db.dropDb();
  } catch (DbException e) {
      e.printStackTrace();
  }

更多数据库测试:

 public void TestDatabase() { 
        try {
            DbManager db = x.getDb(daoConfig);
            Cache_User sqliteUser = new Cache_User();
            sqliteUser.name = "测试" + System.currentTimeMillis();
​
            //db.save(parent);
            db.saveBindingId(sqliteUser);//保存对象关联数据库生成的id 
            
            Calendar calendar = Calendar.getInstance();
            calendar.add(Calendar.DATE, -1);
            calendar.add(Calendar.HOUR, 3);
​
            List<Cache_User> list = db.selector(Cache_User.class)
                    .where("id", "<", 54)
                    .and("time", ">", calendar.getTime())
                    .orderBy("id")
                    .limit(10).findAll(); 
​
            if (list.size() > 0) {
               
            }
​
            // test update
            sqliteUser.name = "hahaha123" + System.currentTimeMillis();
​
            db.update(sqliteUser);
            db.update(sqliteUser, "name", "email");
            db.update(Cache_User.class,
                    WhereBuilder.b("id", "=", 1).and("isAdmin", "=", true),
                    new KeyValue("name", "test_name"), new KeyValue("isAdmin", false));
​
            List<DbModel> dbModels = db.selector(Cache_User.class)
                    .groupBy("name")
                    .select("name", "count(name) as count").findAll(); 
        } catch (Throwable e) {
​
        }
    }

PS:获取Activity中的fragment使用如下代码:

Fragment currentFragment = FragmentManager.findFragment(this.findViewById(R.id.fragment_content_main));

----------------------------------------------------------------------------------------------------

注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的推荐】,非常感谢!

 

 

posted @ 2021-09-07 13:26  kiba518  阅读(352)  评论(0编辑  收藏  举报