xutils使用手册(二)——数据库
2019独角兽企业重金招聘Python工程师标准>>>
Xutils使用手册
Xutils对数据库的增删改查
在上一篇博客中我们讲到了怎么在Android Studio环境中添加xutils依赖,这里我们通过xutils来对数据库进行增删改查
一、初始化数据库
在MainApplication(参考上一篇博客)中添加如下代码:
private DbManager.DaoConfig config;@Overridepublic void onCreate() {super.onCreate();x.Ext.init(this);x.Ext.setDebug(true);//是否输出Debug日志config = new DbManager.DaoConfig();//每一个config对象描述一个数据库,多个数据库就创建多个config对象//这里作为示例,我们只创建一个名字为dbName版本号为1的数据库config.setDbName("dbName").setDbVersion(1);//设置数据库版本号//config.setDbDir(File file);// 该语句会将数据库文件保存在你想存储的地方//如果不设置则默认存储在应用程序目录下/database/dbName.dbconfig.setDbUpgradeListener(new DbManager.DbUpgradeListener() {@Overridepublic void onUpgrade(DbManager db, int oldVersion, int newVersion) {//用来监听数据库是否升级//如果当前数据库版本号比已存在的数据库版本号高则执行此片段//用途:软件升级之后在第一次运行时执行一些必要的初始化操作}});config.setTableCreateListener(new DbManager.TableCreateListener() {@Overridepublic void onTableCreated(DbManager db, TableEntity<?> table) {//用来监听数据表的创建//当第一次创建表的时候执行此片段}});config.setAllowTransaction(true);//是否允许开启事务}
因为DbManager这个对象我们会在其他地方使用,我们可以存放到一个专门的配置文件中存放,但是出于方便考虑,我们在MainApplication中提供一个get方法
public DbManager.DaoConfig getDaoConfig() {return config;
}
ok,数据库初始化完毕
二、创建一个数据表模型类
创建一个包com.doservlet.dao 并在包下创建一个User对象
package com.doservlet.dao;import org.xutils.db.annotation.Column;
import org.xutils.db.annotation.Table;/*** Created by 陈小默*/
//Table注解指定了这个Bean类对应的数据表
@Table(name = "user")
public class User {//Column注解指明了这个属性在数据表中状态@Column(name = "id", isId = true)private int id;@Column(name = "name")private String name;@Column(name = "age")private int age;@Column(name = "sex")private boolean sex;public User() {}public User(int age, String name, boolean sex) {this.age = age;this.name = name;this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public boolean isSex() {return sex;}public void setSex(boolean sex) {this.sex = sex;}@Overridepublic String toString() {return "User{" +"age=" + age +", id=" + id +", name='" + name + '\'' +", sex=" + sex +'}';}
}
定义好模型类我们就开始下一步操作
三、简单的UI布局搭建
修改activity_main.xml布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context="com.doservlet.xutilsdemo.MainActivity"><Buttonandroid:id="@+id/insert"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="insert"android:text="insert" /><EditTextandroid:id="@+id/id"android:layout_width="match_parent"android:layout_height="wrap_content" /><Buttonandroid:id="@+id/delete"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="delete"android:text="delete" /><Buttonandroid:id="@+id/update"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="update"android:text="update" /><Buttonandroid:id="@+id/query"android:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="query"android:text="query" /><TextViewandroid:id="@+id/query_list"android:layout_width="match_parent"android:layout_height="match_parent" />
</LinearLayout>
现在我们来完善MainActivity的代码 ###三、Java代码
增
int age = (int) (Math.random() * 20 + 10);
User user = new User(age, "name" + age, age % 2 == 0);
//我们只需要创建一个bean类
DbManager db = x.getDb(((MainApplication) getApplication()).getDaoConfig());
try {db.save(user);
} catch (DbException e) {query_list.setText("save failure:" + e.getMessage());
}
删
这里我使用了三种方式
//方式1
//通过创建一个条件对象来删除,注意不要向这个条件对象里赋除了条件以外的其他任何值
{User user = new User();user.setId(id);try {db.delete(user);} catch (DbException e) {query_list.setText("delete failure:" + e.getMessage());}
}
//方式二
//通过自己构建条件来删除
{try {db.delete(User.class, WhereBuilder.b("id", "=", id));//参数解析 第一个参数是列名 第二个参数是条件= != > <等等条件,第三个参数为传递的值//如果条件参数不止一个的话,我们还可以使用.and("id", "=", id)方法//同理还有.or("id", "=", id)方法} catch (DbException e) {query_list.setText("delete failure:" + e.getMessage());}
}
//方式三
{
try {
db.deleteById(User.class, id);
} catch (DbException e) {e.printStackTrace();}}
改
DbManager db = x.getDb(((MainApplication) getApplication()).getDaoConfig());int id = Integer.parseInt(et.getText().toString());try {User user = new User();user.setId(id);user.setName("update");db.update(user, "name");//这里更改的条件只有id,这里参数的意思是将id=id的数据的name列属性改为user对象中的name属性} catch (DbException e) {e.printStackTrace();}
查
DbManager db = x.getDb(((MainApplication) getApplication()).getDaoConfig());List<User> all = null;//输入0查询全部try {Selector<User> selector = db.selector(User.class);//如果要使用条件查询的话可以使用//Selector<User> selector = db.selector(User.class).where("id","=",id).and("age",">",10);all = selector.findAll();} catch (DbException e) {e.printStackTrace();}StringBuilder sb = new StringBuilder();if (all != null)for (User user : all) {sb.append(user.toString()).append("\r\n");}else {sb.append("null");}query_list.setText(sb.toString());}
附上MainActivity的完整代码
package com.doservlet.xutilsdemo;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;import com.doservlet.dao.User;import org.xutils.DbManager;
import org.xutils.common.util.KeyValue;
import org.xutils.db.Selector;
import org.xutils.db.sqlite.SqlInfo;
import org.xutils.db.sqlite.SqlInfoBuilder;
import org.xutils.db.sqlite.WhereBuilder;
import org.xutils.ex.DbException;
import org.xutils.x;import java.util.List;public class MainActivity extends AppCompatActivity {private TextView query_list;private EditText et;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);initView();}private void initView() {query_list = (TextView) findViewById(R.id.query_list);et = (EditText) findViewById(R.id.id);}public void insert(View view) {int age = (int) (Math.random() * 20 + 10);User user = new User(age, "name" + age, age % 2 == 0);DbManager db = x.getDb(((MainApplication) getApplication()).getDaoConfig());try {db.save(user);} catch (DbException e) {query_list.setText("save failure:" + e.getMessage());}}public void delete(View view) {DbManager db = x.getDb(((MainApplication) getApplication()).getDaoConfig());int id = Integer.parseInt(et.getText().toString());//方式1//通过创建一个条件对象来删除,注意不要向这个条件对象里赋除了条件以外的其他任何值{User user = new User();user.setId(id);try {db.delete(user);} catch (DbException e) {query_list.setText("delete failure:" + e.getMessage());}}//方式二//通过自己构建条件来删除{try {db.delete(User.class, WhereBuilder.b("id", "=", id));//参数解析 第一个参数是列名 第二个参数是条件= != > <等等条件,第三个参数为传递的值//如果条件参数不止一个的话,我们还可以使用.and("id", "=", id)方法//同理还有.or("id", "=", id)方法} catch (DbException e) {query_list.setText("delete failure:" + e.getMessage());}}//方式三{try {db.deleteById(User.class, id);} catch (DbException e) {e.printStackTrace();}}}public void update(View view) {DbManager db = x.getDb(((MainApplication) getApplication()).getDaoConfig());int id = Integer.parseInt(et.getText().toString());try {User user = new User();user.setId(id);user.setName("update");db.update(user, "name");} catch (DbException e) {e.printStackTrace();}}public void query(View view) {DbManager db = x.getDb(((MainApplication) getApplication()).getDaoConfig());int id = Integer.parseInt(et.getText().toString());List<User> all = null;try {Selector<User> selector = db.selector(User.class);//如果要使用条件查询的话可以使用//Selector<User> selector = db.selector(User.class).where("id","=",id).and("age",">",10);all = selector.findAll();} catch (DbException e) {e.printStackTrace();}}StringBuilder sb = new StringBuilder();if (all != null)for (User user : all) {sb.append(user.toString()).append("\r\n");}else {sb.append("null");}query_list.setText(sb.toString());}
}
四、效果演示
点击3次insert按钮 增加3条数据 在点击一下query按钮
现在我们在输入框中输入 1 ,然后单击delete按钮
现在点击query查询一下数据库
id=1的数据确实被删除掉了
现在我们实验一下update,在输入框中输入2,然后点击update按钮,再点击query插叙数据库
测试完毕
结语(一定要看)
到这里我们已经能够使用xutils来操作数据库了。 从以上教程我们可以发现一个很严重的问题,那就是xutils的数据库操作过程十分繁琐,甚至比直接使用Android sdk提供的数据操作方法更为复杂。
完全失去了其作为一个工具类框架应有的简洁与优雅
作为替代,后面我会抽时间介绍其他数据库工具类在Android上的应用
转载于:https://my.oschina.net/oschenxiaomo/blog/675694
xutils使用手册(二)——数据库相关推荐
- [导入][转]sap学习手册二
SAP学习手册二 作者:sunxufeng 有没有调整IDES4.6的中文包参数的步骤呢? 在导入中文包后直接手工修改有关参数,不要用CZ10去修改假定为D盘,路径为D:usrsapC11syspro ...
- 玄子Share-BCSP助学手册之数据库开发
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2siD2CaR-1680452775172)(./assets/XuanZiShare_QQ_3336392096.jp ...
- SQL不完全手册(二):高级语句
原博主博客地址:https://blog.csdn.net/qq21497936 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/80 ...
- android数据库降级_Android SQLite (二.数据库创建,升级及降级)
上篇文章简介和常用语法介绍了SQLite数据库的基本信息和一些常用的语法操作,本篇文章主要介绍Android开发过程中SQLite数据库的创建使用和常见问题处理. 一.SQLiteOpenHelper ...
- Oracle使用手册(二)---流程控制
Oracle使用手册(二)---流程控制 --流程控制 --1. if..then..end if set serveroutput on declare i integer:=60; j in ...
- 实验三 mysql数据库与表的创建_实验二 数据库和表的创建与管理
实验二 数据库和表的创建与管理 创建用于企业管理的员工管理数据库,数据库名为YGGL中,YGGL数据库中包括三个表:Employees(员工信息表).Departments(部门信息表).Salary ...
- JavaScript 学习手册二
JavaScript 学习手册二:JS 数据类型 第1关:JavaScript 数据类型介绍 任务描述 本关任务:在函数 objectTest() 内部定义了六个变量 a.b.c.d.e.f,并已经赋 ...
- GIS工具maptalks开发手册(二)01-02之GeoJSON转化为Geometry——渲染点
GIS工具maptalks开发手册(二)01-02之GeoJSON转化为Geometry--渲染点 效果 1.html官方版 <!DOCTYPE html> <html> &l ...
- GIS工具maptalks开发手册(二)01-01之Geometry转化为GeoJSON——渲染点
GIS工具maptalks开发手册(二)01-01之Geometry转化为GeoJSON--渲染点 1.html官方版 效果-点 html官方版本 <!DOCTYPE html> < ...
最新文章
- quartz获取开始结束时间_王者荣耀s21什么时候开始是9月24日吗?王者荣耀s20赛季结束时间...
- OpenCV中cvWaitKey()函数注意事项
- Fluent Design单选按钮,复选框,选择框,Java菜单
- Codeforces Good Bye 2015 A. New Year and Days 水题
- 三星台式机计算机编号怎么看,三星笔记本如何查看型号
- MobileNet(v1、v2)——CNN经典网络模型详解(pytorch实现)
- 基于Visual Studio2012实现Windows8的metro界面笔迹手写识别文档
- 怎样用 Python 控制图片人物动起来?一文就能 Get!
- 在线JSON转flow工具
- Xshell官网免费版
- java+oracle+ojdbc14_请教:使用ojdbc5.jar作为驱动jar包无法正常连接oracle数据库,而使用ojdbc14.jar却可以正常连接?...
- 基于nao机器人实现语音对话(智能版本)
- html设置背景图片颜色,CSS设置背景图片及背景颜色示例
- linux硬盘异响,完美解决Ubuntu Linux关机异响[SATA硬盘]
- 铁威马NAS设备映射到外网进行访问
- 如何看待越来越多年轻人追捧「摸鱼哲学」,拒绝努力的年轻人真比老一辈活得更通透吗?
- 修复IE默认主页——注册表篇
- 自兴人工智能——Python第二课(列表和元组)
- word参考文献交叉引用一次性更新全部域
- Beanstalkd源码分析—bury和kick命令的实现