当前位置:网站首页>Android-第十三节03xUtils-数据库框架(增删改查)详解
Android-第十三节03xUtils-数据库框架(增删改查)详解
2022-07-28 17:44:00 【夏屿_】
一、xUtils框架使用方法
准备工作
第一步:引入依赖
implementation 'org.xutils:xutils:3.8.5'

第二步:添加权限
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
AndroidManifest.xml文件application 节点里添加
android:requestLegacyExternalStorage="true"
android:usesCleartextTraffic="true"

第三步:MainActivity中添加
x.Ext.init(getApplication());
x.Ext.setDebug(BuildConfig.DEBUG);// 是否输出debug日志, 开启debug会影响性能.
x.view().inject(this);//没有用到view注解可以先不用

二、数据库映射
原生数据库:通过sql语法来对数据库进行操作
数据库框架-xUtils:通过对对象的操作 来对数据库进行操作
第一步,创建实体类对象 User
使用框架的好处是,我们不需要像之前一样去用sql语法创建表,而是通过在实体类中添加注解表示表名,然后通过实体类中的字段刚好对应上数据库表中的字段,可以通过true来指定主键

package com.hnucm.a_test134;
import org.xutils.db.annotation.Column;
import org.xutils.db.annotation.Table;
@Table(name="user")
public class User {
@Column(name="id",isId = true)
public int id;
@Column(name="sex")
public String sex;
@Column(name="age")
public int age;
@Column(name="name")
public String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", sex='" + sex + '\'' +
", age=" + age +
", name='" + name + '\'' +
'}';
}
}
在对数据库操作前,先创建DaoConfig 对象(作为成员变量)
DbManager.DaoConfig daoConfig = new DbManager.DaoConfig()
.setDbName("test.db")
// 不设置dbDir时, 默认存储在app的私有目录.
// .setDbDir(new File("/sdcard")) // "sdcard"的写法并非最佳实践, 这里为了简单, 先这样写了.
.setDbVersion(2)
.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();
}
});

1.增加数据
原来增加数据还要用到sql语法,这里直接创建一个DbManager ,然后这个DbManager 可以调用save方法来增加数据,然后这个save里面传的是这个user对象
DbManager db = null;
try {
db = x.getDb(daoConfig);
User user = new User();
user.setUsername("甜甜柯");
user.setSex("女");
user.setAge(24);
db.save(user);
} catch (DbException e) {
e.printStackTrace();
return;
}
可以发现我们对数据库的操作实际上是对对象的操作,省去了很多sql的语法

运行结果:
2.删除数据
1.根据id 删除
在点击事件中添加
DbManager db = null;
try {
db = x.getDb(daoConfig);
User user = new User();
user.setId(2);
db.delete(user);
} catch (DbException e) {
e.printStackTrace();
return;
}

运行结果:
2.根据条件删除
DbManager db = null;
try {
db = x.getDb(daoConfig);
db.delete(User.class,
WhereBuilder.b("age", "=",24));
} catch (DbException e) {
e.printStackTrace();
return;
}
运行结果:
4.修改数据
1.根据id 删除
try {
DbManager db = null;
db = x.getDb(daoConfig);
User user = new User();
user.setId(10);
user.setUsername("韩老二");
user.setSex("男");
user.setAge(30);
db.saveOrUpdate(user);
// db.update(user);或者用这个方法修改
} catch (DbException e) {
e.printStackTrace();
return;
}


2.根据条件删除
DbManager db = null;
db = x.getDb(daoConfig);
db.update(User.class, WhereBuilder.b("age", "=", 24),
// WhereBuilder.b("id", "=", 1).and("isAdmin", "=", true).,
new KeyValue("username", "微凉"), new KeyValue("sex", "男"));
} catch (DbException e) {
e.printStackTrace();
return;
}


5.查询数据
1.根据条件查询数据
查询id=8的数据
DbManager db = null;
try {// 删除1
db = x.getDb(daoConfig);
List<User> users = new ArrayList<>();
users= db.selector(User.class).orderBy("id", true).limit(1000).where("id","=",8).findAll();
for (User user : users){
Log.i("userdb","数据:" + user);
}
} catch (DbException e) {
e.printStackTrace();
return;
}
运行结果:
2.查询所有数据
最后我们梳理一下,查询所有数据的操作是,通过创建一个db对象,然后调用它的selector的方法,往里面传一个User.class,表示我们要去User.class这个表里面去查,然后查到的数据自动封装到一个User对象里面,由于我们这个有很多条数据,所以就封装到了一个List集合里面,findAll()就表示查询所有的数据,我们可以发现这个方法并不带有任何的sql语法
DbManager db = null;
try {// 删除1
db = x.getDb(daoConfig);
List<User> users = new ArrayList<>();
users= db.selector(User.class).findAll();
for (User user : users){
Log.i("userdb","数据:" + user);
}
} catch (DbException e) {
e.printStackTrace();
return;
}

数据库框架-xUtils是不是比之前的方法都简单一些!!继续加油!
边栏推荐
- Have you ever seen this kind of dynamic programming -- the stock problem of state machine dynamic programming (Part 2)
- 英文翻译意大利语-批量英文翻译意大利语工具免费
- lua语言的左对齐函数(手写)
- Ardupilot software in the loop simulation and online debugging
- Prometheus部署
- Mid 2022 summary
- Application of TSDB in civil aircraft industry
- Application of time series database in Hydropower Station
- 我的第二次博客——C语言
- BLDC 6步换相 simulink
猜你喜欢

Rust Getting Started Guide (rustup, cargo)

adb remount of the / superblock failed: Permission denied

Pytoch: quickly find the main diagonal elements and non diagonal elements of NxN matrix

ES6's new data container map

文章翻译软件-批量免费翻译软件支持各大翻译接口

宝塔面板搭建小说CMS管理系统源码实测 - ThinkPHP6.0

【已解决】AC86U ML改版固件虚拟内存创建失败,提示USB磁盘读写速度不满足要求

Pagoda panel construction novel CMS management system source code measurement - thinkphp6.0

CVPR21-无监督异常检测《CutPaste:Self-Supervised Learning for Anomaly Detection and Localization》

Accumulation and development -- the way of commercialization of open source companies
随机推荐
WPF 实现带蒙版的 MessageBox 消息提示框
SaltStack常用的模块
Pytoch: quickly find the main diagonal elements and non diagonal elements of NxN matrix
The mystery of ID number
使用百度EasyDL实现明厨亮灶厨师帽识别
After reading the thesis for three years, I learned to read the abstract today
IMU 加热
ES6's new data container map
How to use Qianqian listening sound effect plug-in (fierce Classic)
Validate hardware DDR design with Xilinx MIG
Quickly install torch spark, torch geometric and other packages in moment pool cloud
Sword finger offer II 109. unlock the password lock
Swing事件处理的过程是怎样的?
Powerbi time series analysis, prediction and visualization tutorial
【笔记】《结网:互联网产品经理改变世界》
SQL audit tool self introduction owls
串口接收应用——环形缓冲buffer
SaltStack之return与job管理
CVPR19 - 调参干货《Bag of Tricks for Image Classification with Convolutional Neural Network》
以数字化转型为契机,3C企业如何通过SRM供应商云协同平台实现高效协同?