xutils使用手册(二)——数据库
2016-05-16 10:33
381 查看
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上的应用
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件