Android xUtils3使用 - 数据库操作
这篇主要记录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来操作数据库,很多方法都没有用上 ,可以自己百度