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使用手册(二)——数据库相关推荐

  1. [导入][转]sap学习手册二

    SAP学习手册二 作者:sunxufeng 有没有调整IDES4.6的中文包参数的步骤呢? 在导入中文包后直接手工修改有关参数,不要用CZ10去修改假定为D盘,路径为D:usrsapC11syspro ...

  2. 玄子Share-BCSP助学手册之数据库开发

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2siD2CaR-1680452775172)(./assets/XuanZiShare_QQ_3336392096.jp ...

  3. SQL不完全手册(二):高级语句

    原博主博客地址:https://blog.csdn.net/qq21497936 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/80 ...

  4. android数据库降级_Android SQLite (二.数据库创建,升级及降级)

    上篇文章简介和常用语法介绍了SQLite数据库的基本信息和一些常用的语法操作,本篇文章主要介绍Android开发过程中SQLite数据库的创建使用和常见问题处理. 一.SQLiteOpenHelper ...

  5. Oracle使用手册(二)---流程控制

    Oracle使用手册(二)---流程控制 --流程控制 --1. if..then..end if  set serveroutput on  declare  i integer:=60; j in ...

  6. 实验三 mysql数据库与表的创建_实验二 数据库和表的创建与管理

    实验二 数据库和表的创建与管理 创建用于企业管理的员工管理数据库,数据库名为YGGL中,YGGL数据库中包括三个表:Employees(员工信息表).Departments(部门信息表).Salary ...

  7. JavaScript 学习手册二

    JavaScript 学习手册二:JS 数据类型 第1关:JavaScript 数据类型介绍 任务描述 本关任务:在函数 objectTest() 内部定义了六个变量 a.b.c.d.e.f,并已经赋 ...

  8. GIS工具maptalks开发手册(二)01-02之GeoJSON转化为Geometry——渲染点

    GIS工具maptalks开发手册(二)01-02之GeoJSON转化为Geometry--渲染点 效果 1.html官方版 <!DOCTYPE html> <html> &l ...

  9. GIS工具maptalks开发手册(二)01-01之Geometry转化为GeoJSON——渲染点

    GIS工具maptalks开发手册(二)01-01之Geometry转化为GeoJSON--渲染点 1.html官方版 效果-点 html官方版本 <!DOCTYPE html> < ...

最新文章

  1. quartz获取开始结束时间_王者荣耀s21什么时候开始是9月24日吗?王者荣耀s20赛季结束时间...
  2. OpenCV中cvWaitKey()函数注意事项
  3. Fluent Design单选按钮,复选框,选择框,Java菜单
  4. Codeforces Good Bye 2015 A. New Year and Days 水题
  5. 三星台式机计算机编号怎么看,三星笔记本如何查看型号
  6. MobileNet(v1、v2)——CNN经典网络模型详解(pytorch实现)
  7. 基于Visual Studio2012实现Windows8的metro界面笔迹手写识别文档
  8. 怎样用 Python 控制图片人物动起来?一文就能 Get!
  9. 在线JSON转flow工具
  10. Xshell官网免费版
  11. java+oracle+ojdbc14_请教:使用ojdbc5.jar作为驱动jar包无法正常连接oracle数据库,而使用ojdbc14.jar却可以正常连接?...
  12. 基于nao机器人实现语音对话(智能版本)
  13. html设置背景图片颜色,CSS设置背景图片及背景颜色示例
  14. linux硬盘异响,完美解决Ubuntu Linux关机异响[SATA硬盘]
  15. 铁威马NAS设备映射到外网进行访问
  16. 如何看待越来越多年轻人追捧「摸鱼哲学」,拒绝努力的年轻人真比老一辈活得更通透吗?
  17. 修复IE默认主页——注册表篇
  18. 自兴人工智能——Python第二课(列表和元组)
  19. word参考文献交叉引用一次性更新全部域
  20. Beanstalkd源码分析—bury和kick命令的实现

热门文章

  1. 提高PHP编程效率的53个要点(转)
  2. Linux之文件管理命令
  3. Struts2, jquery, select二级联动
  4. [algothrim]URL相似度计算的思考
  5. java中hashCode()在Map中的作用
  6. 为jQuery的$.ajax设置超时时间
  7. python之常见问题集锦
  8. SQL积累-SQL取得字符串中的文件名
  9. Successor,Fesible Successor,FD,AD,eigrp
  10. MLS 移动最小二乘