Android xUtils框架(一) DbUtils

来源:互联网 发布:nginx 目录浏览 编辑:程序博客网 时间:2024/06/05 10:40


框架地址:https://github.com/wyouflf/xUtils


需要的权限

<uses-permissionandroid:name="android.permission.INTERNET"/>

    <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>


创建数据库

  DaoConfig config = new DaoConfig(context);

  config.setDbName("xUtils-demo"); //db名

  config.setDbVersion(1);  //db版本

  DbUtils db = DbUtils.create(config);//db还有其他的一些构造方法,比如含有更新表版本的监听器的


创建表

  db.createTableIfNotExist(User.class); //创建一个表User

    db.save(user);//在表中保存一个user对象。最初执行保存动作时,也会创建User表


删除表

  db.dropTable(User.class); 


开启事务

  db.configAllowTransaction(true);


db相关Annotation

  @Check    check约束
  @Column   列名
  @Finder   一对多、多对一、多对多关系(见sample的Parent、Child中的使用)
  @Foreign  外键
  @Id       主键,当为int类型时,默认自增。 非自增时,需要设置id的值
  @NoAutoIncrement  不自增
  @NotNull  不为空
  @Table    表名
  @Transient  不写入数据库表结构
  @Unique   唯一约束


一些常用方法

DbUtils db = DbUtils.create(this);User user = new User(); //这里需要注意的是User对象必须有id属性,或者有通过@ID注解的属性user.setEmail("wyouflf@qq.com");user.setName("wyouflf");db.save(user); // 使用saveBindingId保存实体时会为实体的id赋值...// 查找Parent entity = db.findById(Parent.class, parent.getId());List<Parent> list = db.findAll(Parent.class);//通过类型查找Parent Parent = db.findFirst(Selector.from(Parent.class).where("name","=","test"));// IS NULLParent Parent = db.findFirst(Selector.from(Parent.class).where("name","=", null));// IS NOT NULLParent Parent = db.findFirst(Selector.from(Parent.class).where("name","!=", null));// WHERE id<54 AND (age>20 OR age<30) ORDER BY id LIMIT pageSize OFFSET pageOffsetList<Parent> list = db.findAll(Selector.from(Parent.class)                                   .where("id" ,"<", 54)                                   .and(WhereBuilder.b("age", ">", 20).or("age", " < ", 30))                                   .orderBy("id")                                   .limit(pageSize)                                   .offset(pageSize * pageIndex));// op为"in"时,最后一个参数必须是数组或Iterable的实现类(例如List等)Parent test = db.findFirst(Selector.from(Parent.class).where("id", "in", new int[]{1, 2, 3}));// op为"between"时,最后一个参数必须是数组或Iterable的实现类(例如List等)Parent test = db.findFirst(Selector.from(Parent.class).where("id", "between", new String[]{"1", "5"}));DbModel dbModel = db.findDbModelAll(Selector.from(Parent.class).select("name"));//select("name")只取出name列List<DbModel> dbModels = db.findDbModelAll(Selector.from(Parent.class).groupBy("name").select("name", "count(name)"));...//例:分组聚合查询出  Parent表中 非重复的name和它的对应数量List<DbModel> dbModels = db.findDbModelAll(Selector.form(Parent.class).select("distinct name,count(name) as num").groupBy("name")); db.execNonQuery("sql") // 执行自定义sql...

db相关类库结构:

com.lidroid.xutils.db.annotationCheck.javaColumn.javaFinder.javaForeign.javaId.javaNoAutoIncrement.javaNotNull.javaTable.javaTransient.javaUnique.javacom.lidroid.xutils.db.converterBooleanColumnConverter.javaByteArrayColumnConverter.javaByteColumnConverter.javaCharColumnConverter.javaColumnConverter.javaColumnConverterFactory.javaDateColumnConverter.javaDoubleColumnConverter.javaFloatColumnConverter.javaIntegerColumnConverter.javaLongColumnConverter.javaShortColumnConverter.javaSqlDateColumnConverter.javaStringColumnConverter.javacom.lidroid.xutils.db.sqliteColumnDbType.javaCursorUtils.javaDbModelSelector.javaFinderLazyLoader.javaForeignLazyLoader.javaSelector.javaSqlInfo.javaSqlInfoBuilder.javaWhereBuilder.javacom.lidroid.xutils.db.tableColumn.javaColumnUtils.javaDbModel.javaFinder.javaForeign.javaId.javaKeyValue.javaTable.javaTableUtils.java



6 8