首页 > 技术文章 > Android xUtils3使用 - 数据库操作

lyd447113735 2018-06-21 16:49 原文

 

这篇主要记录xUtils3的DbUtils模块的用法

 

DbUtils模块:用于数据库的操作,也是需要注解方式指定表名和列名;

 


下面主要通过数据库的“增删改查”四步操作记录xUtils DbUtils模块的使用

 

步骤一:在应用中添加xUtils3框架的依赖

 

compile files('libs/xUtils-3.3.22.jar')

 

 

 

步骤二:在Application类的子类中初始化xUtils

我这里定义子类为Myapp.java

 

package com.contentprovide.liuliu.myapplication;

import android.app.Application;

import org.xutils.x;

/**
 * Created by liuliu on 2018/6/21.
 */

public class Myapp extends Application {


    @Override
    public void onCreate() {
        super.onCreate();
        x.Ext.init(this);
    }

    
}

 

 

 

 这里有个要注意的地方,Myapp这个类继承的是Application类是为了在全局都可以使用,所以需要在AndroidManifest中注册

 <application
        android:name=".Myapp"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"

 


 

步骤三:初始化xUtils和注册完Application的子类之后我们就可以通过xUtils的一些方法区创建数据库中用的表了,了解一点数据库的学这个应该会很容易

我这里创建了一个user类

 

package com.contentprovide.liuliu.myapplication;

import org.xutils.db.annotation.Column;
import org.xutils.db.annotation.Table;

/**
 * Created by liuliu on 2018/6/21.
 */
//注解表名
@Table(name = "table_user")
public class user {

//    同过xUtils的注解指定表中的列名
    @Column(name = "usename")
    String usename;
    @Column(name = "pass")
    String pass;
    @Column(name = "age")
    String age;
    @Column(name = "sex")
    String sex;
    @Column(name = "id", isId = true, autoGen = true)
    int id;

    
//    这里重写toString方法不是必须的,我是为了等下要日志输出数据库中的内容,
//    让这些内容看起来更好看,所以重写了这个方法,这个方法可以快捷键生成
       @Override
    public String toString() {
        return "User{" +
                "usename='" + usename + '\'' +
                ", id=" + id +
                ", pass='" + pass + '\'' +
                ", age=" + age +
                ", sex='" + sex + '\'' +
                '}';
    }


   

    public String getUsename() {
        return usename;
    }

    public void setUsename(String usename) {
        this.usename = usename;
    }

    public String getPass() {
        return pass;
    }

    public void setPass(String pass) {
        this.pass = pass;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }
}

 

 

 

 

上面这段代码用到了一些注解操作数据库,下面我写些常用的xUtils注解出来,有兴趣可以看下

 

复制代码
 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     唯一约束

 

 

 

下面几个是注解的属性,上面的user类也有用到

 

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

 

 

 

 

步骤四:在主Acticity中的布局文件中定义好布局,方便等下用来操控数据库

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Button
        android:id="@+id/btn_save"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="save"
        android:textAllCaps="false" />

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

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

    <Button
        android:id="@+id/bt_query"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="query"
        android:textAllCaps="false" />
</LinearLayout>

 

 

 

步骤五:在Acticity中使用xUtils的一些方法对数据库进行增删改查

package com.contentprovide.liuliu.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import org.xutils.DbManager;
import org.xutils.common.util.KeyValue;
import org.xutils.db.sqlite.WhereBuilder;
import org.xutils.ex.DbException;
import org.xutils.x;

import java.util.List;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {


    Button btn_save, btn_delete, btn_update, bt_query;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        init();

    }


    //    初始化控件
    private void init() {

        btn_save = (Button) findViewById(R.id.btn_save);
        btn_delete = (Button) findViewById(R.id.btn_delete);
        btn_update = (Button) findViewById(R.id.btn_update);
        bt_query = (Button) findViewById(R.id.bt_query);

        btn_save.setOnClickListener(this);
        btn_delete.setOnClickListener(this);
        btn_update.setOnClickListener(this);
        bt_query.setOnClickListener(this);

    }

    /**
     * 获取数据库的管理器
     * 通过管理器进行增删改查
     */
    public DbManager getDbManager() {
        DbManager.DaoConfig daoconfig = new DbManager.DaoConfig();
        //默认在data/data/包名/database/数据库名称
        daoconfig.setDbName("user.db");//设置数据库名字
        daoconfig.setDbVersion(1);//默认1
        //通过manager进行增删改查
        return x.getDb(daoconfig);
    }



    //    数据储存
    public void save() {

        user us = new user();
        us.setUsename("");
        us.setAge("12");
        us.setSex("");
        us.setPass("123");
        try {
            //实现数据的存储,配合User类中的注释才能进行对应的存储
            //表名和列名都是在User中注释决定的。
            getDbManager().save(us);//保存
            // manager.saveOrUpdate(user);//保存或更新,这如果数据不存在是不会保存的,存在的话会跟新
        } catch (DbException e) {
            e.printStackTrace();
        }

    }

    /**
     * 删除数据
     * //删除整个表的所有数据
     * //manager.delete(User.class);
     * //删除指定id的记录
     * //manager.deleteById(User.class,1);
     * //删除某一类数据  where name="张三"
     * manager.delete(User.class, WhereBuilder.b("username", "=", "王五").and("age", "<", "100"));
     */
    //    数据删除
    public void delet() {
        try {
            getDbManager().delete(user.class, WhereBuilder.b("usename", "=", "网"));
        } catch (DbException e) {
            e.printStackTrace();

        }
    }


    //    数据修改
    public void updata() {
        //要修改的数据,以键值对的显示传入,
        KeyValue keyValue = new KeyValue("usename", "");
        try {
            //过滤年龄小于20的数据就修改,这里可以设置多个keyValue值
            getDbManager().update(user.class, WhereBuilder.b("age", "=", "12"), keyValue);
        } catch (DbException e) {
            e.printStackTrace();
        }
    }


    //    数据获取
    public void get() {
        //获取管理器
        try {
            List<user> all = getDbManager().findAll(user.class);
            //manager.findById()找单个的对象
            for (int i = 0; i < all.size(); i++) {
                Log.e("TAG", all.get(i).toString());//打印显示

            }
        
        } catch (DbException e) {
            e.printStackTrace();
        }
    }


    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.btn_save:
                save();
                break;
            case R.id.btn_delete:
                delet();
                break;
            case R.id.btn_update:
                updata();
                break;
            case R.id.bt_query:
                get();
                break;
        }
    }
    

}

 

 

 

我们一起来看下效果:

 

 

点一下save按钮再点一下query按钮,控制台输出下面的信息

 

 

 

 点一下updata按钮,再点一下query按钮,控制台输出啊下面的信息

 

 点一下delete按钮,再点一下query按钮,控制台没有任何信息输出,数据库中的内容被删除了

 

 

 

这里是简单记录一下怎么通过使用xUtils来操作数据库,很多方法都没有用上 ,可以自己百度

 

 

 

 

推荐阅读