首先在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));

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

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

xUtils3的使用教程的更多相关文章

  1. 一个C#开发搭建Android框架的心路历程

    前言 Java框架实在是太多了,因为是初学乍练,所以,只好以百度为标准选择框架了. Java的框架文章太难写了,因为他引用了太多框架,而没一个框架都有很繁琐的配置,把每个框架都写一遍,就等于写书了:所 ...

  2. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  3. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  4. Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数

    上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...

  5. Angular2入门系列教程4-服务

    上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...

  6. Angular2入门系列教程1-使用Angular-cli搭建Angular2开发环境

    一直在学Angular2,百忙之中抽点时间来写个简单的教程. 2016年是前端飞速发展的一年,前端越来越形成了(web component)组件化的编程模式:以前Jquery通吃一切的田园时代一去不复 ...

  7. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  8. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

  9. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

随机推荐

  1. IO流实现简单的文件的剪切

    思路: 判断 即将 复制的文件是文件夹还是文件 遍历需要复制的源文件夹 如果是文件夹,就通过流创建一个同样的子文件夹 如果是文件,就复制过去 接下来上代码 public class Demo1 { p ...

  2. wpf 多表头

    WPF多表头技术探索总结 方案一:Grid+TextBlock嵌套DataGrid方式. 该方案是现在项目中已使用的方案.实现起来比较简单,但不具有通用性,不同数据DataGrid需要指定不同的Tex ...

  3. 苹果ASA广告投放归因的接入

    前段时间,苹果终于在大陆区开放了应用商店的竞价广告.毫无疑问又开启了苹果应用导量的新玩法,各大厂商都紧跟脚步吃螃蟹.本篇讲解苹果广告中的归因部分. 苹果广告其实在海外已运行多年,而因为IDFA的政策变 ...

  4. Linux安装Cockpit监控服务

    CentOS/RHEL 8的新特性之一就是自带了一个cockpit的监控服务.通过c/s架构模式运行,客户端输入ip:端口即可访问 这类似于glances监控. 如果你不是使用的centos/rhel ...

  5. 鸿蒙内核源码分析(内存分配篇) | 内存有哪些分配方式  | 百篇博客分析OpenHarmony源码 | v11.02

    百篇博客系列篇.本篇为: v11.xx 鸿蒙内核源码分析(内存分配篇) | 内存有哪些分配方式 | 51.c.h .o 内存管理相关篇为: v11.xx 鸿蒙内核源码分析(内存分配篇) | 内存有哪些 ...

  6. vue组件的生命周期详解

    1.生命周期&生命周期函数 生命周期:指一个组件从创建->运行->销毁的整个阶段,强调的是一个时间段. 生命周期函数:由vue框架提供的内置函数,会伴随着组件的生命周期,自动按序执 ...

  7. Skywalking-13:Skywalking模块加载机制

    模块加载机制 基本概述 Module 是 Skywalking 在 OAP 提供的一种管理功能特性的机制.通过 Module 机制,可以方便的定义模块,并且可以提供多种实现,在配置文件中任意选择实现. ...

  8. amber模拟kcl水溶液

    最近刚开始学习amber软件,看网上的教程勉强知道怎么操作这个amber了.就暂时跑了个分子动力学,其他的啥也没处理.先把我的操作过程记录下来吧,免得日后忘记. 一.构建kcl.pdb结构 利用Gau ...

  9. Python技法-序列拆分

    Python中的任何序列(可迭代的对象)都可以通过赋值操作进行拆分,包括但不限于元组.列表.字符串.文件.迭代器.生成器等. 元组拆分 元组拆分是最为常见的一种拆分,示例如下: p = (4, 5) ...

  10. 从零入门 Serverless | 架构的演进

    作者 | 许晓斌 阿里云高级技术专家 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复 入门 ,即可获取 Serverless ...