Android xUtils3.0使用手册(二) - 数据库操作

步骤: 

(1). 创建数据表;

(2). DaoConfig 获取数据库的配置信息;

(3).  获取数据库实例:  x.getDb(daoConfig);

(4). 数据库的增删改查。

1. 创建数据表

在这里要强调的是,数据库里面表的创建的时间,只有在你对数据库里面的操作涉及到这张表的操作时,会先判断当前的表是否存在,如果不存在,才会创建一张表,如果存在,才会进行相应的CRUD操作。

 1 @Table(name = "person")
 2 public class person {
 3     @Column(name = "ID", isId = true, autoGen = true)
 4     public int id;
 5     @Column(name = "NAME")
 6     public String name; // 姓名
 7     @Column(name = "AGE")
 8     public int age; // 年龄
 9     @Column(name = "SEX")
10     public String sex; // 性别
1112     @Override13     public String toString() {
14         return "person [id=" + id + ", name=" + name + ", age=" + age + ", sex=" + sex + "]";
15     }16 }

上表中包含了db相关注解:

 1 @Check     check约束
 2 @Column    列名
 3 @Finder    一对多、多对一、多对多关系(见sample的Parent、Child中的使用)
 4 @Foreign   外键
 5 @Id        主键,当为int类型时,默认自增。 非自增时,需要设置id的值
 6 @NoAutoIncrement  不自增
 7 @NotNull  不为空
 8 @Table    表名
 9 @Transient  不写入数据库表结构
10 @Unique     唯一约束

注解属性

name (String)       :  表名称
isId (boolean)      :  是否为主键
autoGen (boolean)   :  是否自增(默认: false)
proprety (String)   :  是否为空(默认: NOT NULL) 

2. DaoConfig 获取数据库的配置信息

 1 //本地数据的初始化
 2 DbManager.DaoConfig daoConfig = new DbManager.DaoConfig()
 3         .setDbName("my_db.db") //设置数据库名
 4         .setDbVersion(1) //设置数据库版本,每次启动应用时将会检查该版本号,
 5         // 发现数据库版本低于这里设置的值将进行数据库升级并触发DbUpgradeListener
 6         .setAllowTransaction(true) //设置是否开启事务,默认为false关闭事务
 7         .setTableCreateListener(new DbManager.TableCreateListener() {
 8                 @Override
 9                 public void onTableCreated(DbManager dbManager, TableEntity<?> tableEntity) {
10                 }
11         })
12         .setDbOpenListener(new DbManager.DbOpenListener() {
13                 @Override
14                 public void onDbOpened(DbManager db) {
15                     // 开启WAL, 对写入加速提升巨大
16                     db.getDatabase().enableWriteAheadLogging();
17                 }
18         })
19         // 设置数据库创建时的Listener
20         .setDbUpgradeListener(new DbManager.DbUpgradeListener() {
21                 @Override
22                 public void onUpgrade(DbManager db, int oldVersion, int newVersion) {
23                     // TODO: ...
24                     // db.addColumn(...);
25                     // db.dropTable(...);
26                     // ...
27                     // or
28                     // db.dropDb();
29                 }
30         }); //设置数据库升级时的Listener,这里可以执行相关数据库表的相关修改,比如alter语句增加字段等
31         // .setDbDir(null);//设置数据库.db文件存放的目录,默认为包名下databases目录下
32
33 DBManager db = x.getDb(daoConfig);

3. 获取数据库实例

DbManager db = x.getDb(daoConfig);

4. 表 操作

通过DbManager这类我们可以做如下操作:

.getDaoConfig  // 获取数据库的配置信息
.getDatabase   // 获取数据库实例
.replace       // 只有存在唯一索引时才有用 (慎重)
.dropTable     // 删除表
.addColumn     // 添加一列
.dropDb        // 删除数据库

5. 增 操作

1 try {
2     List<person> list = new ArrayList<person>();
3     // ... 加载数据
4
5     db.save(list); // 保存实体类或者实体类的List到数据库
6     db.saveOrUpdate(list); // 保存或更新实体类或者实体类的List到数据库,根据id对应的数据是否存在
7     db.saveBindingId(list); // 保存实体类或实体类的List到数据库,如果该类型的id是自动生成的,则保存完后会给id赋值
8 } catch (DbException e) {
9 }

6. 删 操作

1 try {
2     db.delete(person.class);//该方法是删除表中的全部数据
3     db.deleteById(person.class, 12);//该方法主要是根据表的主键(id)进行单条记录的删除
4     db.delete(person.class, WhereBuilder.b("age", ">", "20"));//根据where语句的条件进行删除操作
5     List<person> findAll = db.selector(person.class).expr("age > 20").findAll();
6     db.delete(findAll);//根据实体bean进行对表里面的一条或多条数据进行删除
7 } catch (DbException e) {
8 }

7. 改 操作

 1 // 第一种
 2 try {
 3     List<Person> findAll = db.findAll(Person.class);
 4     for (Person person : findAll) {
 5         person.setAge(10);
 6     }
 7     db.update(findAll, "age"); //可以使对象、集合
 8 } catch (DbException e) {
 9 }
10 // 第二种
11 try {
12     PersonTable person = db.findById(Person.class, 1);
13     person.setAge(25);
14     db.update(person, "age");
15 } catch(DbException e){
16 }

8. 查 操作

 1 try {
 2     db.findById(person.class, 1);//通过主键的值来进行查找表里面的数据
 3     db.findFirst(person.class);//返回当前表里面的第一条数据
 4     List<person> findAll = db.findAll(person.class);//返回当前表里面的所有数据
 5     db.findDbModelAll(new SqlInfo("select * from person where age > 25"));
 6     DbModel model = db.findDbModelFirst(new SqlInfo("select * from person where age > 25"));
 7     model.getString("age");//model相当于游标
 8     List<person> findAll2 = db.selector(person.class).expr("age >10").findAll();//主要是用来进行一些特定条件的查找
 9 } catch (DbException e) {
10 }

9. 相关资料

?  Android xUtils3.0使用手册(一)- 基础功能使用

时间: 2024-10-11 20:45:06

Android xUtils3.0使用手册(二) - 数据库操作的相关文章

Android xUtils3源码解析之数据库模块

xUtils3源码解析系列 一. Android xUtils3源码解析之网络模块 二. Android xUtils3源码解析之图片模块 三. Android xUtils3源码解析之注解模块 四. Android xUtils3源码解析之数据库模块 配置数据库 DbManager.DaoConfig daoConfig = new DbManager.DaoConfig() .setDbName("test.db") .setDbVersion(1) .setDbOpenListe

Android Afinal框架学习(一) FinalDb 数据库操作

框架地址:https://github.com/yangfuhai/afinal 对应源码: net.tsz.afinal.annotation.sqlite.* net.tsz.afinal.db.sqlite.* net.tsz.afinal.db.table.* net.tsz.afinal.utils.ClassUtils.net.tsz.afinal.utils.FieldUtils FinalDb 建库 FinalDb db = FinalDb.create(context, "my

Android学习--------实现增删改查数据库操作以及实现类似微信好友对话管理操作

最近的一个实验用到东西挺多,特地总结一下. 要求功能: 1.第一个页面添加歌曲名和歌手,跳到第二个页面列表显示所有记录,使用sqlite数据库 2.对于第二个页面显示的信息可以进行删除和修改操作,并自动刷新 最后我做的效果: 长按列表项弹出单个管理的菜单,像微信好友对话管理一样. 删除时可以直接删除这一条并在列表中直接显示,更新时弹出对话框更新内容提交后在列表中重新显示. 做此例遇到的困难: 1.菜单获取上下文 2.获取对话框中的内容 3.对话框按钮添加监听事件-----注意包不要导错:impo

Android 6.0 应用权限(二) -- 与系统权限一起工作(Working with System Permissions) 使用MarkDown重新整理了排版

为了保护系统集成度和用户的隐私,Android在一个受限访问的沙箱中运行每个程序.如果这个应用想要使用它的沙箱外的其他资源或信息,就必须显性地请求权限.依赖于应用请求的权限类型,系统可能会自动地授权或者通过询问用户来授权 本节向你展示如何为你的应用声明和授予权限. Declare Permissions(声明权限) 每个Android应用都运行在一个受限访问的沙箱中..如果这个应用想要使用它的沙箱外的其他资源或信息,就需要请求正确的权限.你可以通过在App Manifest中列出这些权限来声明你

EF5.0中的跨数据库操作

以前在用MVC + EF 的项目中,都是一个数据库,一个DbContext,因此一直没有考虑过在MVC+EF的环境下对于多个数据库的操作问题.等到要使用时,才发现这个问题也不小(关键是有个坑).直接说这个问题的解决流程吧: 1)由以往的经验:在ADO.NET中,要操作多个数据库,那就多写两个SqlHelper吧,或封装下,能动态的修改链接字符串.因此想到在这里能不能建多个ADO.NET实体数据模型呢?于是乎就有了这样两个文件:SealDBModel.edmx及UcmsDBModel.edmx.

Android 6.0 IMS流程(二)——接口扩展(从RIL到APP)

平时工作中,经常有这样的需求,就是从RIL层一直到APP,添加一个新接口给APP调用,方便系统APP或者第三方APP通过这个接口获取或者改变modem中某些的值.状态等. 基于高通平台,有三种方式去实现这种接口: 扩展ImsSenderRxr,依赖ImsService来实现. 扩展RILJ,依赖Phone进程来实现. 结合1和2,依赖Phone进程来实现. 其中,第一种方式最简单,第二种次之,第三种最复杂:但是每种方式各自有各自的限制条件以及适用范围. 本文来自http://blog.csdn.

Android内部自带的SQLite数据库操作dos命令

1:什么叫做SQLite数据库 Android系统内核是Linux系统,Android系统很特殊,他自带了一个SQLite数据库,轻量型的一款嵌入式的数据库 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.操作简单,你如果是之前学过其他的数据库的基础的话, 操作起来可以说是举手之劳. 2:这个SQLite数据库的数据类型有哪些. Integer  整型  有符号整数 -1,0,1,2,3- Real 浮点型以 8字节 IEEE 浮点数存储. Text. 值是文本字符串,使用数据

MySQL二:数据库操作

阅读目录 一 知识储备 二 初识SQL语言 三 系统数据库 四 创建数据库 五 数据库相关操作 一 知识储备 MySQL数据库基本操作知识储备 数据库服务器:一台计算机(对内存要求比较高) 数据库管理系统:如mysql,是一个软件 数据库:oldboy_stu,相当于文件夹 表:student,scholl,class_list,相当于一个具体的文件 记录:1 曾小贤 123456789,相当于文件中的一行内容 二 初识SQL语言 SQL(Structured Query Language 即结

Android 7.0 UICC 分析(二)

本文讲解UiccCard类 /frameworks/opt/telephony/src/java/com/android/internal/telephony/uicc/UiccCard.java UICCController 类的onGetIccCardStatusDone() 方法,根据获取的SIM状态信息IccCardStatus 创建或更新UiccCard 对象: private synchronized void onGetIccCardStatusDone(AsyncResult a