在DbUtils中,只支持4中数据类型:

  1. public enum ColumnDbType {
  2. INTEGER("INTEGER"), REAL("REAL"), TEXT("TEXT"), BLOB("BLOB");
  3. private String value;
  4. ColumnDbType(String value) {
  5. this.value = value;
  6. }
  7. @Override
  8. public String toString() {
  9. return value;
  10. }
  11. }

而在Java中,我们有8种基本类型,但是我们在使用DbUtils时,都能正确的对这些数据类型进行存取,
这是怎么做到的呢?

第一步,先创建数据库

创建数据库

DaoConfig config = new DaoConfig(context);

config.setDbName("xUtils-demo"); //数据库名

config.setDbVersion(1);  //数据库版本号

DbUtils db = DbUtils.create(config);//db还有其他的一些构造方法,比如含有更新表版本的监听器的 假如不设置监听器默认在升级的时候会将旧版本的表删掉

第二步,根据需求创建实体类,然后进行注解,注解方式如下图

下面这是常用到的一些Annotation(注解)    //注解可不等同于注释,不要混为一谈

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

查询

  1. try {
  2. db.saveAll(list);
  3. db.findAll(Child.class);
  4. db.findAll(Selector.from(Child.class).where("id", ">", 2));
  5. db.findById(Child.class, 1);
  6. db.findFirst(Child.class);
  7. db.findFirst(Selector.from(Child.class).where("id", ">", 2));
  8. db.findDbModelAll(DbModelSelector.from(Child.class).groupBy("hobby").having(WhereBuilder.b("id", ">", 2)));
  9. db.findDbModelFirst(DbModelSelector.from(Child.class).groupBy("hobby").having(WhereBuilder.b("id", ">", 2)));
  10. Cursor c = db.execQuery(new SqlInfo("select * from child;"));
  11. //findDbModelFirst和findDbModelAll相当是对execQuery做了再次封装,
  12. //返回的DbModel中,封装了通过列名获取value的方法,如:String getString(String columnName)等等.
  13. DbModel model = db.findDbModelFirst(new SqlInfo("select * from child;")); //采取原生sql语句,可以做多表查询操作
  14. List<DbModel> modellist = db.findDbModelAll(new SqlInfo("select * from child;"));
  15. } catch (DbException e) {
  16. // TODO Auto-generated catch block
  17. e.printStackTrace();
  18. }
用于更新表结构的数据,保存原来的数据
public static void updateTable(DbUtils dbUtils, Class<?> tClass) {
try {
if (dbUtils.tableIsExist(tClass)) {
String tableName = tClass.getName();
tableName = tableName.replace(".", "_");
String sql = "select * from " + tableName;
//声名一个map用来保存原有表中的字段
 Map<String, String> filedMap = new HashMap<>();
//执行自定义的sql语句
  Cursor cursor = dbUtils.execQuery(sql);
int count = cursor.getColumnCount();
for (int i = 0; i < count; i++) {
filedMap.put(cursor.getColumnName(i), cursor.getColumnName(i));
}
//cursor在用完之后一定要close
 cursor.close();
//下面用到了一些反射知识,下面是获取实体类的所有私有属性(即我们更改表结构后的所有字段名)
 Field[] fields = UserInfo.class.getDeclaredFields(); for (int i = 0; i < fields.length; i++) {
if (filedMap.containsKey(fields[i].getName())) {
//假如字段名已存在就进行下次循环
 continue;
} else {
//不存在,就放到map中,并且给表添加字段
 filedMap.put(fields[i].getName(), fields[i].getName());
//根据属性的类型给表增加字段
if (fields[i].getType().toString().equals("class java.lang.String")) { dbUtils.execNonQuery("alter table " + tableName + " add " + fields[i].getName() + " TEXT ");
} else if (fields[i].getType().equals("int") || fields[i].getType().equals("long") || fields[i].getType().equals("boolean")) {
dbUtils.execNonQuery("alter table " + tableName + " add " + fields[i].getName() + " INTEGER ");
}
}
} }
} catch (DbException e) {
e.printStackTrace();
}
} 注意事项:
1.当类中有id或_id时,可以省略Id的注解 2.当id,_id或@Id注解Field为integer型时,primary key默认为autoincrement
此时,可以用@NoAutoIncrement注解该字段,使其不自增 3.@NoAutoIncrement注解仅用于primary key. 4.一个类中,只可以使用一个@Id注解,当使用多个@Id注解时,primary key未知 5.一个类中,如果同时存在id,_id,@Id时,primary key优先级为 @Id > id > _id 6.@Id如果使用Column参数,则primary key列名为Column值 7.@Id如果不指明参数,则primary key列名为字段名  

xUtils系列之DbUtils-Check注解

Check注解定义:

  1. @Target(ElementType.FIELD)
  2. @Retention(RetentionPolicy.RUNTIME)
  3. public @interface Check {
  4. String value();
  5. }

DbUtils解析代码:

  1. String check = ColumnUtils.getCheck(column.getColumnField());
  2. if (check != null) {
  3. sqlBuffer.append(" CHECK(").append(check).append(")");
  4. }

用法:

  1. @Column(column="age")
  2. @Check("age > 18")
  3. private int age;

xUtils系列之DbUtils-增,删,更新,替换操作

http://blog.csdn.net/androidresearch/article/details/45704337

Android xUtils框架(一) DbUtils的更多相关文章

  1. Android Xutils 框架(转)

    Android Xutils 框架 (转) 目录(?)[-] xUtils简介 目前xUtils主要有四大模块 使用xUtils快速开发框架需要有以下权限 混淆时注意事项 DbUtils使用方法 Vi ...

  2. Android Xutils框架使用问题及解决办法

    刚刚写了篇博客,提了下在使用XUtils时遇到的一个问题Android Xutils框架HttpUtil Get请求缓存问题 ,既然已经提起来这个问题,那我想了下,就把之前使用Xutils时遇到的几个 ...

  3. Android Xutils框架HttpUtil Get请求缓存问题

    话说,今天和服务器开发人员小小的逗逼了一下,为啥呢? 话说今天有个"收藏产品"的请求接口,是get request的哦,我客户端写好接口后,点击"收藏按钮",返 ...

  4. Android Xutils 框架

    XUtils是git上比较活跃 功能比较完善的一个框架,是基于afinal开发的,比afinal稳定性提高了不少,下面是介绍: 鉴于大家的热情,我又写了一篇Android 最火框架XUtils之注解机 ...

  5. android xUtils get post

    使用android xUtils框架,进行http的get和post验证. 参考链接: https://github.com/wyouflf/xUtils3 http://blog.csdn.net/ ...

  6. xUTils框架的学习(二)

    这章讲的是框架的DbUtils模块的学习 三 xUtils框架的DButils模块 最开始接触这个框架就是从数据库模块开始的.当时的需求是需要记录用户的登录数据,保存在本地以便进行离线登录.首先想到的 ...

  7. Android使用XUtils框架上传照片(一张或多张)和文本,server接收照片和文字(无乱码)

    Android上传图片,这里我使用了如今比較流行的XUtils框架.该框架能够实现文件上传.文件下载.图片缓存等等,有待研究. 以下是Android端上传的代码: xUtils.jar下载 Strin ...

  8. xUtils框架的使用

    xUtils简介 xUtils 包含了很多实用的android工具,xUtils 源于Afinal框架,对Afinal进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持,拥有 ...

  9. 值得推荐的android开源框架

    1.volley 项目地址https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载: (2) 网络请求的排序(scheduling) ...

随机推荐

  1. 剑指offer之 二叉搜索树与双向链表

    class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) ...

  2. spring boot拦截器

    实现自定义拦截器只需要3步: 1.创建我们自己的拦截器类并实现 HandlerInterceptor 接口. 2.创建一个Java类继承WebMvcConfigurerAdapter,并重写 addI ...

  3. R Customizing graphics

    Customizing graphics GraphicsLaTeXLattice (Treillis) plots In this chapter (it tends to be overly co ...

  4. 分享知识-快乐自己:HBase编程

    HBase编程: 一):大数据(hadoop)初始化环境搭建 二):大数据(hadoop)环境搭建 三):运行wordcount案例 四):揭秘HDFS 五):揭秘MapReduce 六):揭秘HBa ...

  5. kylin_学习_01_kylin安装部署

    一.环境准备 根据官方文档,kylin是需要运行在hadoop环境下的,如下图: 1.hadoop环境搭建 参考:hadoop_学习_02_Hadoop环境搭建(单机) 2.hbase环境搭建 参考: ...

  6. 使用SQL脚本创建数据库,操作主键、外键与各种约束(MS SQL Server)

    在实际开发中,可能很少人会手写sql脚本来操作数据库的种种.特别是微软的MS SQL Server数据库,它的SQL Server Management Studio对数据库的图形化操作极致简便,从而 ...

  7. 继续学习C:数字进制表示

    1. 数字后面跟D表示十进制,如:123D. 2. 数字后面跟B表示二进制,如:10010B. 3. 数字后面跟Q表示八进制,如:652Q. 4. 数字后面跟H表示十六进制,如:2B5H. 把十进制数 ...

  8. CMake简易入门

    使用CMake编译 CMake工具用于生成Makefile文件.用户通过编写CMakeLists.txt文件,描述构建过程(编译.连接.测试.打包),之后通过解析该文件,生成目标平台的Makefile ...

  9. SPOJ8093Sevenk Love Oimaster(广义后缀自动机)

    Oimaster and sevenk love each other.     But recently,sevenk heard that a girl named ChuYuXun was da ...

  10. bzoj 4031: 小Z的房间 矩阵树定理

    bzoj 4031: 小Z的房间 矩阵树定理 题目: 你突然有了一个大房子,房子里面有一些房间.事实上,你的房子可以看做是一个包含n*m个格子的格状矩形,每个格子是一个房间或者是一个柱子.在一开始的时 ...