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

Xutils使用手册

Xutils对数据库的增删改查

  • Xutils使用手册

    • Xutils对数据库的增删改查

      • 一初始化数据库
      • 二创建一个数据表模型类
      • 三简单的UI布局搭建
      • 三Java代码
        • 附上MainActivity的完整代码
      • 四效果演示
    • 结语一定要看

在上一篇博客中我们讲到了怎么在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);
                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上的应用

时间: 2024-10-13 11:59:34

xutils使用手册(二)——数据库的相关文章

oracle学习入门系列之二 数据库基础知识

oracle学习入门系列之二 数据库基础知识 本篇蛤蟆要梳理下那些被淡忘的数据库基础知识,也许根本就没被人记住过.不管是哪种情况,该记住的必须记住,记不住就把他记下来吧. 首先问几个问题如下: 数据库基础知识是什么? 好吧,蛤蟆直接吐后而不亡,看目录开始吧. 本人邮箱:[email protected] 微信公众号:HopToad 欢迎各界交流 1      基本概念 概念就是概念,大伙对这些名词不要死磕,但是对定义一定要理解,理解方能领悟,领悟方能运用自如后创新. 1.1      数据 数据

实验二 数据库和表的创建与管理

实验二 数据库和表的创建与管理  创建用于企业管理的员工管理数据库,数据库名为YGGL中,YGGL数据库中包括三个表:Employees(员工信息表).Departments(部门信息表).Salary(员工薪水情况表).各表的结构如下表: 表1   Employees表结构 列名 数据类型 长度 是否允许为空 说明 EmployeeID char 6 not null 员工编号,主键 Name char 10 not null 姓名 Education char 4 not null 学历 B

Keras学习手册(二),快速开始-Sequential 顺序模型

感谢作者分享-http://bjbsair.com/2020-04-07/tech-info/30660.html 顺序模型是多个网络层的线性堆叠. 你可以通过将网络层实例的列表传递给 Sequential 的构造器,来创建一个 Sequential 模型: from keras.models import Sequential from keras.layers import Dense, Activation model = Sequential([ Dense(32, input_shap

[数据库事务与锁]详解二: 数据库的读现象浅析

注明: 本文转载自http://www.hollischuang.com/archives/900 “读现象”是多个事务并发执行时,在读取数据方面可能碰到的状况.先了解它们有助于理解各隔离级别的含义.其中包括脏读.不可重复读和幻读. 脏读 脏读又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的. 脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交(commit)到

数据库实验二 数据库和数据表的创建

实验环境: SQL Service 2014 一.数据库的创建 有三种类型的文件用来存储数据库: 主文件包含数据库的启动信息.主文件还可以用来存储数据.每个数据库都包含一个主文件. 次要文件保存所有主要数据文件中容纳不下的数据.如果主文件大到足以容纳数据库中的所有数据,就不需要有次要数据文件.而另一些数据库可能非常大,需要多个次要数据文件,也可能使用多个独立磁盘驱动器上的次要文件,以将数据分布在多个磁盘上. 事务日志文件保存用来恢复数据库的日志信息.每个数据库必须至少有一个事务日志文件(尽管可以

Ogre参考手册(二)3.1.1-3.1.2 材质、技术、通道

说明 翻译自Ogre 1.81 manual,在不影响理解的情况下做了删减,以减小阅读的时间和翻译的工作量 这么做只是去掉了文字上修饰部分,并没有减少任何原文档中的知识点,可以作为对等的参考手册 另外对一些不易理解的部分做了修改,或通过“附”做了标注 如果你发现了不易理解的部分,可以跟帖回复,我会原文做修改或回复 注:原文编写时间2006年第三季度,已经接近十年 所以里面所说的老显卡都已是古董,先进显卡也已是老显卡 3 脚本 Ogre的很多功能可以通过脚本驱动,以便于设置.脚本都是简单的文本文件

MySQL二:数据库操作

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

xutils,afinal的数据库升级要注意的地方

总之如果你要进行数据库的升级操作,请一定要注意以下写法 DbUtils.create(context, MyApplication.DBNAMESTRING, MyApplication.DBVERSION, this); MyApplication . DBNAMESTRING 是数据库名称,缺省是xutils.db MyApplication.DBVERSION 是数据库版本,缺省是1 那么当有数据库操作时 一定不能简写DbUtils.create(context) 一旦这样写就会把数据库全

云平台数据库安全系列之(二)数据库审计

虚拟化平台和传统网络环境共存,应用服务器和数据库服务器要在混合云平台进行数据库审计,就要区别于传统的部署方式,本文以vSphere虚拟平台为例,对数据库审计在混合虚拟化平台上的部署进行实践探讨. 一.传统数据库审计产品在虚拟化平台下的局限性 虚拟化能够应对 IT 部门面临的最紧迫难题:基础架构无序扩张,迫使 IT 部门将其 70% 的预算用于维护,而只留下很少的资源用于业务发展创新. 这一困难源于当今 x86 服务器的体系结构:它们的设计使其在同一时间只能运行一个操作系统和应用.这样一来,即使是