package org.xutils.sample; import android.view.View; import android.widget.TextView; import org.xutils.DbManager; import org.xutils.db.table.DbModel; 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.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") .setDbDir(new File("/sdcard")) .setDbVersion(2) .setDbUpgradeListener(new DbManager.DbUpgradeListener() { @Override public void onUpgrade(DbManager db, int oldVersion, int newVersion) { // TODO: ... // db.addColumn(...); // db.dropTable(...); // ... } }); @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(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); } //parent.name = "hahaha123"; //db.update(parent); 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); } } }