Android xUtils框架(一) DbUtils

在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注解该字段,使其不自增

[email protected]注解仅用于primary key.

4.一个类中,只可以使用一个@Id注解,当使用多个@Id注解时,primary key未知

5.一个类中,如果同时存在id,_id,@Id时,primary key优先级为 @Id > id > _id

[email protected]如果使用Column参数,则primary key列名为Column值

[email protected]如果不指明参数,则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

时间: 2024-10-14 07:35:19

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

Android Xutils 框架

Android Xutils 框架 (转) 目录(?)[-] xUtils简介 目前xUtils主要有四大模块 使用xUtils快速开发框架需要有以下权限 混淆时注意事项 DbUtils使用方法 ViewUtils使用方法 HttpUtils使用方法 普通get方法 使用HttpUtils上传文件 或者 提交数据 到服务器post方法 使用HttpUtils下载文件 BitmapUtils 使用方法 其他更多示例代码见sample文件夹中的代码 输出日志 LogUtils xUtils简介 xU

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

刚刚写了篇博客,提了下在使用XUtils时遇到的一个问题Android Xutils框架HttpUtil Get请求缓存问题 ,既然已经提起来这个问题,那我想了下,就把之前使用Xutils时遇到的几个小问题整理一下. 一. HttpUtil Get请求缓存问题 关于Xtuls框架的Http模块的get请求方法,会有缓存问题--即进行get请求时,在缓存规定的时间内,如果发送同样的请求url,则不会再次请服务器发送请求,而是直接返回上次请求的结果. 之前写了一篇博客已经介绍的很详细了,可查看<An

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

话说,今天和服务器开发人员小小的逗逼了一下,为啥呢? 话说今天有个"收藏产品"的请求接口,是get request的哦,我客户端写好接口后,点击"收藏按钮",返回"收藏成功",我又点了一下,尼玛居然还是"收藏成功",我再点一下,这下对了,返回给我"取消收藏成功",好吧,我又点了一下,彻底郁闷了,居然又是"取消收藏成功",这不是逗我的么? 于是我让服务器人员检查他的接口,是不是有啥幺蛾子,

Android:XUtils框架的简单应用

XUtils是目前git上比较活跃 功能比较完善的一个框架,是基于afinal开发的,比afinal稳定性提高了很多. xUtils简介 xUtils 包含了很多实用的android工具. xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响... xUitls最低兼容android 2.2 (api level 8) 目前xUtils主要有四大模块: DbUti

Android xUtils框架(二) ViewUtils

框架地址:https://github.com/wyouflf/xUtils 作用: 完全注解方式就可以进行UI绑定和事件绑定. 无需findViewById和setClickListener等. UI绑定: @ContentView(R.layout.view_acti) //setContentView 注解在activity的声明上方 @ViewInject(R.id.lv_test) //反射view  注解在一个view声明上 @ResInject(id=R.string.app_na

Android 开源框架 ( 五 ) xUtils --- Android 里的 ORM IOC聚合型框架

xUtils同Afinal一样属于聚合型框架, 大而全,但是越容易牵一发而动全身.所以不推荐使用,只做了解即可.应付手头临时项目. Android 开源框架 ( 四 ) Afinal --- Android 里的 ORM IOC聚合型框架 一.Xutils 介绍 Xutils是基于afinal开发的,但是比afinal稳定性提高了不少.xUtils 最初源于Afinal框架,进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持(10种谓词),拥有更加灵活的ORM,更多的事

包含很多实用android工具的xUtils框架

包含很多实用android工具的xUtils框架 xUtils 包含了很多实用的android工具.xUtils 源于Afinal框架,对Afinal进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持,拥有更加灵活的ORM,更多的事件注解支持且不受混淆影响.xUitls最低兼容android 2.2 (api level 8). xUtils框架源码压缩包包含的文件点击下载                                                

Android使用XUtils框架上传照片(一张或多张)和文字,服务器接收照片和文字(无乱码)

Android上传图片,这里我使用了现在比较流行的XUtils框架,该框架可以实现文件上传.文件下载.图片缓存等等,有待研究. 下面是Android段上传的代码: xUtils.jar下载 String uploadHost="http://192.168.1.100:8080/ReceiveImgFromAndroid/ReceiveImgServlet"; //服务器接收地址 RequestParams params=new RequestParams(); params.addB

xUtils框架的介绍(一)

微信账号申请终于通过了,这是我们第一次Android干货分享. 想来是第一次,要对得起“干货”二字. 今天我要为大家推荐的是一个Android基于快速开发的一个框架——xUtils, 它是在aFinal基础上进行重构和扩展的框架, 相比aFinal有很大的改善.同时,如果如果你的应用是基于网络的, 那么只要处理得当,它会让你彻底的摆脱各种工具类和重复代码的困扰. 好的,废话不多说,程序猿们还是代码说起. xUtils 包含了很多实用的android工具.xUtils 源于Afinal框架,