【转载】Xutils3-Dbutils
Github源码地址:https://github.com/wyouflf/xUtils3
下面是源码中sample关于Dbutils的使用代码:
import android.view.View;
import android.widget.TextView; import org.xutils.DbManager;
import org.xutils.common.util.KeyValue;
import org.xutils.db.sqlite.WhereBuilder;
import org.xutils.db.table.DbModel;
import org.xutils.ex.DbException;
import org.xutils.sample.db.Child;
import org.xutils.sample.db.Parent;
import org.xutils.view.annotation.ContentView;
import org.xutils.view.annotation.Event;
import org.xutils.view.annotation.ViewInject;
import org.xutils.x; import java.io.File;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List; /**
* Created by wyouflf on 15/11/4.
*/
@ContentView(R.layout.fragment_db)
public class DbFragment extends BaseFragment { DbManager.DaoConfig daoConfig = new DbManager.DaoConfig()
.setDbName("test.db")
// 不设置dbDir时, 默认存储在app的私有目录.
.setDbDir(new File("/sdcard")) // "sdcard"的写法并非最佳实践, 这里为了简单, 先这样写了.
.setDbVersion(2)
.setDbOpenListener(new DbManager.DbOpenListener() {
@Override
public void onDbOpened(DbManager db) {
// 开启WAL, 对写入加速提升巨大
db.getDatabase().enableWriteAheadLogging();
}
})
.setDbUpgradeListener(new DbManager.DbUpgradeListener() {
@Override
public void onUpgrade(DbManager db, int oldVersion, int newVersion) {
// TODO: ...
// db.addColumn(...);
// db.dropTable(...);
// ...
// or
// db.dropDb();
}
}); @ViewInject(R.id.tv_db_result)
private TextView tv_db_result; @Event(R.id.btn_test_db)
private void onTestDbClick(View view) { // 一对多: (本示例的代码)
// 自己在多的一方(child)保存另一方的(parentId), 查找的时候用parentId查parent或child.
// 一对一:
// 在任何一边保存另一边的Id并加上唯一属性: @Column(name = "parentId", property = "UNIQUE")
// 多对多:
// 再建一个关联表, 保存两边的id. 查询分两步: 先查关联表得到id, 再查对应表的属性. String temp = ""; try { DbManager db = x.getDb(daoConfig); Child child = new Child();
child.setName("child's name"); Parent test = db.selector(Parent.class).where("id", "in", new int[]{1, 3, 6}).findFirst();
// long count = db.selector(Parent.class).where("id", "in", new int[]{1, 3, 6}).count();
// Parent test = db.selector(Parent.class).where("id", "between", new String[]{"1", "5"}).findFirst();
if (test != null) {
child.setParentId(test.getId());
temp += "first parent:" + test + "\n";
tv_db_result.setText(temp);
} Parent parent = new Parent();
parent.name = "测试" + System.currentTimeMillis();
parent.setAdmin(true);
parent.setEmail("wyouflf@qq.com");
parent.setTime(new Date());
parent.setDate(new java.sql.Date(new Date().getTime()));
//db.save(parent);
db.saveBindingId(parent); db.saveBindingId(child);//保存对象关联数据库生成的id List<Child> children = db.selector(Child.class).findAll();
temp += "children size:" + children.size() + "\n";
tv_db_result.setText(temp);
if (children.size() > 0) {
temp += "last children:" + children.get(children.size() - 1) + "\n";
tv_db_result.setText(temp);
} Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -1);
calendar.add(Calendar.HOUR, 3); List<Parent> list = db.selector(Parent.class)
.where("id", "<", 54)
.and("time", ">", calendar.getTime())
.orderBy("id")
.limit(10).findAll();
temp += "find parent size:" + list.size() + "\n";
tv_db_result.setText(temp);
if (list.size() > 0) {
temp += "last parent:" + list.get(list.size() - 1) + "\n";
tv_db_result.setText(temp);
} // test update
parent.name = "hahaha123";
parent.setEmail("wyouflf@gmail.com");
db.update(parent);
db.update(parent, "name", "email");
db.update(Parent.class,
WhereBuilder.b("id", "=", 1).and("isAdmin", "=", true),
new KeyValue("name", "test_name"), new KeyValue("isAdmin", false)); Parent entity = child.getParent(db);
temp += "find by id:" + entity.toString() + "\n";
tv_db_result.setText(temp); List<DbModel> dbModels = db.selector(Parent.class)
.groupBy("name")
.select("name", "count(name) as count").findAll();
temp += "group by result:" + dbModels.get(0).getDataMap() + "\n";
tv_db_result.setText(temp); } catch (Throwable e) {
temp += "error :" + e.getMessage() + "\n";
tv_db_result.setText(temp);
}
} @Event(R.id.btn_test_db2)
private void onTestDb2Click(View view) {
tv_db_result.setText("wait...");
x.task().run(new Runnable() { // 异步执行
@Override
public void run() { DbManager db = x.getDb(daoConfig);
String result = ""; List<Parent> parentList = new ArrayList<Parent>();
for (int i = 0; i < 1000; i++) {
Parent parent = new Parent();
parent.setAdmin(true);
parent.setDate(new java.sql.Date(1234));
parent.setTime(new Date());
parent.setEmail(i + "_@qq.com");
parentList.add(parent);
} long start = System.currentTimeMillis();
for (Parent parent : parentList) {
try {
db.save(parent);
} catch (DbException ex) {
ex.printStackTrace();
}
}
result += "插入1000条数据:" + (System.currentTimeMillis() - start) + "ms\n"; start = System.currentTimeMillis();
try {
parentList = db.selector(Parent.class).orderBy("id", true).limit(1000).findAll();
} catch (DbException ex) {
ex.printStackTrace();
}
result += "查找1000条数据:" + (System.currentTimeMillis() - start) + "ms\n"; start = System.currentTimeMillis();
try {
db.delete(parentList);
} catch (DbException ex) {
ex.printStackTrace();
}
result += "删除1000条数据:" + (System.currentTimeMillis() - start) + "ms\n"; // 批量插入
parentList = new ArrayList<Parent>();
for (int i = 0; i < 1000; i++) {
Parent parent = new Parent();
parent.setAdmin(true);
parent.setDate(new java.sql.Date(1234));
parent.setTime(new Date());
parent.setEmail(i + "_@qq.com");
parentList.add(parent);
} start = System.currentTimeMillis();
try {
db.save(parentList);
} catch (DbException ex) {
ex.printStackTrace();
}
result += "批量插入1000条数据:" + (System.currentTimeMillis() - start) + "ms\n"; try {
parentList = db.selector(Parent.class).orderBy("id", true).limit(1000).findAll();
db.delete(parentList);
} catch (DbException ex) {
ex.printStackTrace();
} final String finalResult = result;
x.task().post(new Runnable() { // UI同步执行
@Override
public void run() {
tv_db_result.setText(finalResult);
}
});
}
});
} }
import org.xutils.DbManager;
import org.xutils.db.annotation.Column;
import org.xutils.db.annotation.Table;
import org.xutils.ex.DbException; /**
* Author: wyouflf
* Date: 13-7-29
* Time: 下午5:04
*/
@Table(name = "child")
public class Child { @Column(name = "id", isId = true)
private int id; @Column(name = "name")
private String name; @Column(name = "email")
private String email; @Column(name = "parentId" /*, property = "UNIQUE"//如果是一对一加上唯一约束*/)
private long parentId; // 外键表id // 这个属性被忽略,不存入数据库
private String willIgnore; @Column(name = "text")
private String text; public Parent getParent(DbManager db) throws DbException {
return db.findById(Parent.class, parentId);
} public long getParentId() {
return parentId;
} public void setParentId(long parentId) {
this.parentId = parentId;
} 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 String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public String getWillIgnore() {
return willIgnore;
} public void setWillIgnore(String willIgnore) {
this.willIgnore = willIgnore;
} public String getText() {
return text;
} public void setText(String text) {
this.text = text;
} @Override
public String toString() {
return "Child{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
", parentId=" + parentId +
", willIgnore='" + willIgnore + '\'' +
", text='" + text + '\'' +
'}';
}
}
import org.xutils.DbManager;
import org.xutils.db.annotation.Column;
import org.xutils.db.annotation.Table;
import org.xutils.ex.DbException; import java.util.Date;
import java.util.List; /**
* Author: wyouflf
* Date: 13-7-25
* Time: 下午7:06
*/
@Table(name = "parent", onCreated = "CREATE UNIQUE INDEX index_name ON parent(name,email)")
public class Parent { @Column(name = "id", isId = true)
private int id; @Column(name = "name")
public String name; @Column(name = "email")
private String email; @Column(name = "isAdmin")
private boolean isAdmin; @Column(name = "time")
private Date time; @Column(name = "date")
private java.sql.Date date; public List<Child> getChildren(DbManager db) throws DbException {
return db.selector(Child.class).where("parentId", "=", this.id).findAll();
} // 一对一
//public Child getChild(DbManager db) throws DbException {
// return db.selector(Child.class).where("parentId", "=", this.id).findFirst();
//} public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public boolean isAdmin() {
return isAdmin;
} public void setAdmin(boolean admin) {
isAdmin = admin;
} public Date getTime() {
return time;
} public void setTime(Date time) {
this.time = time;
} public java.sql.Date getDate() {
return date;
} public void setDate(java.sql.Date date) {
this.date = date;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} @Override
public String toString() {
return "Parent{" +
"id=" + id +
", name='" + name + '\'' +
", email='" + email + '\'' +
", isAdmin=" + isAdmin +
", time=" + time +
", date=" + date +
'}';
}
}
【转载】Xutils3-Dbutils的更多相关文章
- 高性能jdbc封装工具 Apache Commons DbUtils 1.6(转载)
转载自原文地址:http://gao-xianglong.iteye.com/blog/2166444 前言 关于Apache的DbUtils中间件或许了解的人并不多,大部分开发人员在生成环境中更多的 ...
- 【转载】Xutils3源码解析
Github源码地址:https://github.com/wyouflf/xUtils3 原文地址 :http://www.codekk.com/blogs/detail/54cfab086c476 ...
- 【转载】JavaWeb之DBUtils QueryRunner类对数据表的增、删、查(8种结果集处理方式)、改操作
一.使用QueryRunner类,实现对数据表的 insert delete update package com.shuhuadream.queryrunner; import java.sql.C ...
- 【转载】关于DBUtils中QueryRunner的一些解读
前面已经有文章说了DBUtils的一些特性, 这里再来详细说下QueryRunner的一些内部实现, 写的有错误的地方还恳请大家指出. QueryRunner类 QueryRunner中提供对sql语 ...
- [JavaWeb]关于DBUtils中QueryRunner的一些解读.
前言:[本文属于原创分享文章, 转载请注明出处, 谢谢.]前面已经有文章说了DBUtils的一些特性, 这里再来详细说下QueryRunner的一些内部实现, 写的有错误的地方还恳请大家指出. Que ...
- javaweb学习总结—Apache的DBUtils框架学习
注明: 本文转载自http://www.cnblogs.com/xdp-gacl/p/4007225.html 一.commons-dbutils简介 commons-dbutils 是 Apache ...
- DbUtils是Apache出品一款简化JDBC开发的工具类
DbUtils - DbUtils是Apache出品一款简化JDBC开发的工具类 - 使用DbUtils可以让我们JDBC的开发更加简单 - DbUtils的使用: ...
- XUtils===XUtils3框架的基本使用方法
转载自:http://blog.csdn.NET/a1002450926/article/details/50341173 今天给大家带来XUtils3的基本介绍,本文章的案例都是基于XUtils3的 ...
- MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...
- Apache—DBUtils框架简介
转载自:http://blog.csdn.net/fengdongkun/article/details/8236216 Apache—DBUtils框架简介.DbUtils类.QueryRunner ...
随机推荐
- python---Celery分布式任务队列了解
linux下定时器了解 Celery 框架学习笔记(不错哟) Celery 分布式任务队列快速入门 Celery的最佳实践 一.Celery介绍 Celery 是一个 基于python开发的分布式异步 ...
- [LeetCode] 数学计算模拟类问题:加法,除法和幂,注意越界问题。题 剑指Offer,Pow(x, n) ,Divide Two Integers
引言 数学计算的模拟类题目,往往是要求实现某种计算(比如两数相除),实现的过程中会有所限定,比如不允许乘法等等. 这类题目首先要注意计算过程中本身的特殊情况.比如求相除,则必须首先反映过来除数不能为0 ...
- NOIP模拟2
期望得分:100+100+100=300 实际得分:70+40+20=130 T1 [SCOI2007]kshort弱化版 Description 有n个城市和m条单向道路,城市编号为1~n.每条道路 ...
- JAVA多线程提高四:多个线程之间共享数据的方式
多个线程访问共享对象和数据的方式 如果每个线程执行的代码相同,可以使用同一个Runnable对象,这个Runnable对象中有那个共享数据,例如,买票系统就可以这么做. 如果每个线程执行的代码不同,这 ...
- net 加密-解密
#region DES加密 解密 //key:32位 public string DESEncrypt(string strSource, byte[] key) { System.Security. ...
- oozie与mapreduce简单案例
准备工作 拷贝原来的模板 mkdir oozie-apps cd oozie-apps/ cp -r ../examples/apps/mar-reduce . mv map-reduce mr-w ...
- 【洛谷 P4542】 [ZJOI2011]营救皮卡丘(费用流)
题目链接 用最多经过\(k\)条经过\(0\)的路径覆盖所有点. 定义\(ds[i][j]\)表示从\(i\)到\(j\)不经过大于\(max(i,j)\)的点的最短路,显然可以用弗洛伊德求. 然后每 ...
- An impassioned circulation of affection(尺取+预处理)
题目链接:http://codeforces.com/contest/814/problem/C 题目: 题意:给你一个长度为n的字符串,m次查询,每次查询:最多进行k步修改,求字符c(要输入的字符) ...
- Python作业工资管理系统(第三周)
作业内容: 实现效果: 从info.txt文件中读取员工及其工资信息,最后将修改或增加的员工工资信息也写入原info.txt文件. 效果演示: 1. 查询员工工资 2. 修改员工工资 3. 增加新员工 ...
- python模块分析之sqlite3数据库
SQLite作为一种应用广泛的文件式关系型数据库,python操作sqlite主要有两种方式,原生SQL语句和ORM映射工具. SQLAlchemy连接SQLITE SQLAlchemy是一款优秀的p ...