文档章节

xutils使用手册(二)——数据库

陈小默
 陈小默
发布于 2016/05/16 13:58
字数 1764
阅读 212
收藏 2
点赞 2
评论 0

Xutils使用手册

Xutils对数据库的增删改查

在上一篇博客中我们讲到了怎么在Android Studio环境中添加xutils依赖,这里我们通过xutils来对数据库进行增删改查

一、初始化数据库

在MainApplication(参考上一篇博客)中添加如下代码:

private DbManager.DaoConfig config;

    @Override
    public 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.db
        config.setDbUpgradeListener(new DbManager.DbUpgradeListener() {
            @Override
            public void onUpgrade(DbManager db, int oldVersion, int newVersion) {
                //用来监听数据库是否升级
                //如果当前数据库版本号比已存在的数据库版本号高则执行此片段
                //用途:软件升级之后在第一次运行时执行一些必要的初始化操作
            }
        });
        config.setTableCreateListener(new DbManager.TableCreateListener() {
            @Override
            public 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;
    }

    @Override
    public 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">

    <Button
        android:id="@+id/insert"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="insert"
        android:text="insert" />

    <EditText
        android:id="@+id/id"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/delete"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="delete"
        android:text="delete" />

    <Button
        android:id="@+id/update"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="update"
        android:text="update" />

    <Button
        android:id="@+id/query"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="query"
        android:text="query" />

    <TextView
        android: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;

    @Override
    protected 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上的应用

© 著作权归作者所有

共有 人打赏支持
陈小默
粉丝 5
博文 36
码字总数 31230
作品 0
武汉
程序员
安卓系统下的多线程断点下载实现2利用开源框架XUtils

使用开源框架可以大大降低开发的难度,减少开发的周期,并且bug也少的多,软件运行起来更稳定。 xUtils简介 xUtils 包含了很多实用的android工具。 xUtils 支持大文件上传,更全面的http请求...

rootusers ⋅ 2015/03/17 ⋅ 0

基于 Spring Boot 的字段元数据管理 - fieldmeta

fieldmeta: 基于springboot的字段元数据管理 version:Alpha 0.0.1 ,码云地址:https://gitee.com/klguang/fieldmeta 元数据(Metadata), 又称中介数据、中继数据,为描述数据的数据(dat...

klguang ⋅ 06/15 ⋅ 0

xutils使用手册(一)——初始化

Xutils使用手册 Xutils的导入与初始化 一、创建一个新的Android工程 这里我们选用的开发环境是Android Studio 创建一个名字为XutilsDemo的应用下面的包名我是用的是我自己注册的域名(虽然没...

陈小默 ⋅ 2016/05/16 ⋅ 0

Xutils使用手册(四)——网络请求

Xutils使用手册——网络请求 网络请求方法介绍 方法介绍 1,回调对象介绍 xutils提供了两种回调对象,即通用回调对象和缓存回调对象 通用的回调对象 缓存回调对象 进度实时回调对象 2,请求参...

陈小默 ⋅ 2016/05/25 ⋅ 0

Postman Fiddler使用手册

本文主要讲解没有什么主要的内容,主要是一些网上的Postman和fiddle教程,本人亲自测试和阅读过,以下是一些链接, Postman: 一,Postman软件安装 二,Postman使用手册1——导入导出和发送请...

slagga ⋅ 2016/09/24 ⋅ 0

xUtils框架的介绍

微信账号申请终于通过了,这是我们第一次Android干货分享。想来是第一次,要对得起“干货”二字。今天我要为大家推荐的是一个Android基于快速开发的一个框架——xUtils,它是在aFinal基础上进...

Jack_1900 ⋅ 2013/10/31 ⋅ 6

xutils使用手册(三)——IOC注入

这里我们以上一篇数据库的例子来说明IOC注入如何使用原始代码部分 使用了动态注入的代码 xutils通过反射机制使得程序动态的使用findViewById方式为属性注入对象。 注意:在Android Studio如果...

陈小默 ⋅ 2016/05/16 ⋅ 0

欢迎进入阿钟的博客导航——快速查找所有博客

世上最遥远的距离,是我在if里你在else里,似乎一直相伴又永远分离;世界上最痴心的等待,是我当case你是switch,或许永远都选不上自己;世界上最真情的相依,是你在try我在catch。无论你发神...

a_zhon ⋅ 2016/08/25 ⋅ 0

ORM轻量级框架---ActiveAndroid

ORM即Object-Relational Mapping,对象关系映射。简单理解就是把我们Java的对象与数据库里面的记录进行映射,可以把实体对象持久化到数据库中,也能把查询到的记录映射成Java对象。ORM让我们...

Jack_1900 ⋅ 2014/07/29 ⋅ 0

Postman使用手册3——环境变量

一、环境变量 当使用API的时候,你可能经常需要使用不同的设置。环境设置可以让你使用变量自定义request。这个方法可以让你轻松的在不同的设置之间改变而不用改变你的request。你不需要担心要...

常大鹏 ⋅ 2016/06/03 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

windows profesional 2017 build problem

.net framework .... https://stackoverflow.com/questions/43330915/could-not-load-file-or-assembly-microsoft-build-frameworkvs-2017...

机油战士 ⋅ 26分钟前 ⋅ 0

python3中报错的解决方法(长期更新)

1、ImportError: No module named ‘DjangoUeditor’ 出错原因:安装DjangoUeditor库适用于python2,需要下载适用python3的 下载地址:https://github.com/twz915/DjangoUeditor3 2、python3......

xiaoge2016 ⋅ 31分钟前 ⋅ 0

数据结构与算法之双向链表

一、双向链表 1.双向链表的结点结构 typedef struct DualNode{ ElemType data; struct DualNode *prior; // 前驱结点 struct DualNode *next; // 后继结点}DualNode, *DuL...

aibinxiao ⋅ 50分钟前 ⋅ 0

五大最核心的大数据技术

大数据技术有5个核心部分,数据采集、数据存储、数据清洗、数据挖掘、数据可视化。关于这5个部分,有哪些核心技术?这些技术有哪些潜在价值?看完今天的文章就知道了。 大数据学习群:7165810...

董黎明 ⋅ 52分钟前 ⋅ 0

PhpStorm 头部注释、类注释和函数注释的设置

首先,PhpStorm中文件、类、函数等注释的设置在:setting-》Editor-》FIle and Code Template-》Includes下设置即可,其中方法的默认是这样的: /**${PARAM_DOC}#if (${TYPE_HINT} != "v...

nsns ⋅ 52分钟前 ⋅ 0

spring.net AOP

http://www.springframework.net/doc-latest/reference/html/aop-quickstart.html https://www.cnblogs.com/wujy/archive/2013/04/06/3003120.html...

whoisliang ⋅ 57分钟前 ⋅ 0

【HAVENT原创】创建 Dockerfile 生成新的镜像,并发布到 DockerHub

注意:Win7 与 Win10 的版本存在差异,Win7 版本使用 Docker Quickstart Terminal 进入控制台,Win10下面直接用管理员权限打开控制台或者 PowerShell 即可;另外 Win7 下面只能访问 C盘,/ap...

HAVENT ⋅ 57分钟前 ⋅ 0

pom.xml出现web.xml is missing ...解决方案

提示信息应该能看懂。也就是缺少了web.xml文件,<failOnMissingWebXml>被设置成true了。 搜索了一下,Stack Overflow上的答案解决了问题,分享一下。 目前被顶次数最多的回答原文如下: This...

源哥L ⋅ 58分钟前 ⋅ 0

js时间戳与日期格式之间相互转换

1. 将时间戳转换成日期格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // 简单的一句代码 var date = new Date(时间戳); //获取一个时间对象 /** 1. 下面是获取时间日期的方法,需要什么样的格式自己...

Jack088 ⋅ 今天 ⋅ 0

web添加log4j

添加xml配置log4j.properties # Global logging configuration---root日志设置#log4j.rootLogger=info,dailyRollingFile,stdoutlog4j.rootLogger=debug,stdout,dailyRollingFile---......

黄柳淞 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部