当前位置:Gxlcms > 数据库问题 > Xutils3-Dbutils

Xutils3-Dbutils

时间:2021-07-01 10:21:17 帮助过:7人阅读

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

标签:private   db2   保存   models   time   last   tostring   一加   let   

人气教程排行