xutils db

        作为一个Android开发的小白,刚完成了一个不一样的项目。在以往的项目中都是通过请求上传和获取数据,但前段时间的项目由于考虑到在没有网络的恶劣情况下也要保证功能的正常使用,所以采用了数据先本地存储,当有网络之后再和后台数据同步。

        那么问题就来了。以前的开发中数据库逻辑都是在后台,所以,我并不关心数据库中表的关联和逻辑,只知道后台需要什么数据我就穿什么,我想要什么数据后台就给我什么。现在这些都不用了,考验数据库操作能力的时候到了。经过一段时间的摸索,总算有了一些小的体会,现在做个记录。

        数据库操作都是基于xutils框架的。

        第一步当然就是建立数据库了:        

    DaoConfig config = new DaoConfig(context);

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

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

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

    或者直接用  DbUtils db = DbUtils.create("xx.db");

    

    建好数据库之后就是建表了:

    关于表的建立,有用到

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

例:

@Table(name="user")

class User{

    @Column(column="ID")

   private int id;  //当存在整型的变量id或_id时不用特意声明主键,否则需要@Id注明

    @Column(column="Name") //声明一个字段

    private String name; 

    @Column(column="Sex")

    private String sex;

    @Foreign(column="State",foreign="ID")//声明一个外键

    private State state;

    @Transient //不写入表结构

    private int age;

}

class State{

 @Id(column="ID")  @NoAutoIncrement//声明一个String类型的主键,并设定不自增

    private String id;

 @Column(column="Job")

    private String job;

}

@Finder 还不清楚用法,希望用过的人多多指教

 

库和表建好之后就是对表的操作了:

1,查询

    1-1,通过类查询

     User user = db.findFirst(User.class); //查询表user中的第一条数据

    List<User> list = db.findAll(User.class); //查询表user中的所有数据

    1-2,条件查询

    List<User> list = db.findAll(Selector.from(User.class).Where("字段 ","判断","条件"));

    例:List<User> list = db.findAll(Selector.from(User.class).Where("Name","=","张三"));

           User user = db.findByid(User.class,1);//通过id查找

                       List<User> list = db.findAll(Selector.from(User.class).Where("Name","=","张三").and(Where.b("Sex","=","男"))); //多条件查询

            List<User> list  = db.findAll(Selector.from(User.class).Where("Name","in",String[]));//在什么之中查询符合条件的,最后一个参数可以是数组或集合

           List<User> list = db.findAll(Selector.from(User.class).Where("Name","in",String[]).or("ID","<",3));//复杂的条件查询,其他查询一次类推

    1-3,排序

     List<User> list = db.findAll(Selector.from(User.class).orderBy("字段",boolean));//按某个字段进行排序,true为降序,false为升序;

    例:List<User> list = db.findAll(Selector.from(User.class).orderBy("ID",true));//一id字段做一个降序排列

   1-4,分组

    List<DbModle> list = db.findAll(User.class).groupBy("字段").select("字段");//按某个字段分组,并保存字段的值

    例:List<DbModle> list = db.findAll(User.class).groupBy("Sex").select("Sex");//表user里的数据按性别分类,并保存性别值,在使用的时候用DbModle.getString("Sex"),取出保存的数据.

    

转载于:https://my.oschina.net/u/2549561/blog/789253

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值