Android xUtils框架(一) DbUtils
在DbUtils中,只支持4中数据类型:
- public enum ColumnDbType {
- INTEGER("INTEGER"), REAL("REAL"), TEXT("TEXT"), BLOB("BLOB");
- private String value;
- ColumnDbType(String value) {
- this.value = value;
- }
- @Override
- public String toString() {
- return value;
- }
- }
而在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 唯一约束
查询
- try {
- db.saveAll(list);
- db.findAll(Child.class);
- db.findAll(Selector.from(Child.class).where("id", ">", 2));
- db.findById(Child.class, 1);
- db.findFirst(Child.class);
- db.findFirst(Selector.from(Child.class).where("id", ">", 2));
- db.findDbModelAll(DbModelSelector.from(Child.class).groupBy("hobby").having(WhereBuilder.b("id", ">", 2)));
- db.findDbModelFirst(DbModelSelector.from(Child.class).groupBy("hobby").having(WhereBuilder.b("id", ">", 2)));
- Cursor c = db.execQuery(new SqlInfo("select * from child;"));
- //findDbModelFirst和findDbModelAll相当是对execQuery做了再次封装,
- //返回的DbModel中,封装了通过列名获取value的方法,如:String getString(String columnName)等等.
- DbModel model = db.findDbModelFirst(new SqlInfo("select * from child;")); //采取原生sql语句,可以做多表查询操作
- List<DbModel> modellist = db.findDbModelAll(new SqlInfo("select * from child;"));
- } catch (DbException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
用于更新表结构的数据,保存原来的数据
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注解定义:
- @Target(ElementType.FIELD)
- @Retention(RetentionPolicy.RUNTIME)
- public @interface Check {
- String value();
- }
DbUtils解析代码:
- String check = ColumnUtils.getCheck(column.getColumnField());
- if (check != null) {
- sqlBuffer.append(" CHECK(").append(check).append(")");
- }
用法:
- @Column(column="age")
- @Check("age > 18")
- private int age;
xUtils系列之DbUtils-增,删,更新,替换操作
http://blog.csdn.net/androidresearch/article/details/45704337
Android xUtils框架(一) DbUtils的更多相关文章
- Android Xutils 框架(转)
Android Xutils 框架 (转) 目录(?)[-] xUtils简介 目前xUtils主要有四大模块 使用xUtils快速开发框架需要有以下权限 混淆时注意事项 DbUtils使用方法 Vi ...
- Android Xutils框架使用问题及解决办法
刚刚写了篇博客,提了下在使用XUtils时遇到的一个问题Android Xutils框架HttpUtil Get请求缓存问题 ,既然已经提起来这个问题,那我想了下,就把之前使用Xutils时遇到的几个 ...
- Android Xutils框架HttpUtil Get请求缓存问题
话说,今天和服务器开发人员小小的逗逼了一下,为啥呢? 话说今天有个"收藏产品"的请求接口,是get request的哦,我客户端写好接口后,点击"收藏按钮",返 ...
- Android Xutils 框架
XUtils是git上比较活跃 功能比较完善的一个框架,是基于afinal开发的,比afinal稳定性提高了不少,下面是介绍: 鉴于大家的热情,我又写了一篇Android 最火框架XUtils之注解机 ...
- android xUtils get post
使用android xUtils框架,进行http的get和post验证. 参考链接: https://github.com/wyouflf/xUtils3 http://blog.csdn.net/ ...
- xUTils框架的学习(二)
这章讲的是框架的DbUtils模块的学习 三 xUtils框架的DButils模块 最开始接触这个框架就是从数据库模块开始的.当时的需求是需要记录用户的登录数据,保存在本地以便进行离线登录.首先想到的 ...
- Android使用XUtils框架上传照片(一张或多张)和文本,server接收照片和文字(无乱码)
Android上传图片,这里我使用了如今比較流行的XUtils框架.该框架能够实现文件上传.文件下载.图片缓存等等,有待研究. 以下是Android端上传的代码: xUtils.jar下载 Strin ...
- xUtils框架的使用
xUtils简介 xUtils 包含了很多实用的android工具,xUtils 源于Afinal框架,对Afinal进行了大量重构,使得xUtils支持大文件上传,更全面的http请求协议支持,拥有 ...
- 值得推荐的android开源框架
1.volley 项目地址https://github.com/smanikandan14/Volley-demo (1) JSON,图像等的异步下载: (2) 网络请求的排序(scheduling) ...
随机推荐
- 机器学习(二十四)— 偏差Bias 与方差Variance
1.首先 Error = Bias + Variance Error反映的是整个模型的准确度, Bias反映的是模型在样本上的输出与真实值之间的误差,即模型本身的精准度, Variance反映的是模 ...
- WebElement接口获取值
通过WebElement接口获取值 size 获取元素的尺寸 text 获取元素的文本 get_attribute(name) 获取属性值 location 获取元素坐标,先找到要获取的元素,再调用该 ...
- poj3585 Accumulation Degree[树形DP换根]
思路其实非常简单,借用一下最大流求法即可...默认以1为根时,$f[x]$表示以$x$为根的子树最大流.转移的话分两种情况,一种由叶子转移,一种由正常孩子转移,判断一下即可.换根的时候由頂向下递推转移 ...
- bzoj 4817: [Sdoi2017]树点涂色 LCT+树链剖分+线段树
题目: Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同. 定义一条路径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色. Bob可能会进 ...
- GCC生成动态库
main.c #include <stdio.h> void hello(void); int main(int argc, char ** argv) { printf("Th ...
- druid数据源的加密解密工具
数据库得加密 先来一个网上大多数的教程吧,一个比较好的教程,如下. jar包版本:druid-1.0.13.jar 1. 加密,用以下命令将用户名和密码加密 cmd命令行执行 java -cp D:/ ...
- DCloud-MUI:文档 UI组件
ylbtech-DCloud-MUI:文档 UI组件 1.返回顶部 1.accordion(折叠面板) 折叠面板从二级列表中演化而来,dom结构和二级列表类似,如下: <ul class=&qu ...
- python编程范式培训文档,主要是结合4种代码和,对oop和面向过程编程区别和oop转化公式培训。
这是写得培训文档.代码例子在附件. 是经过深入考察 4个git项目里面,找出代码非常非常十分low.代码重复得吓人的的最本质原因.提炼出oop转化公式. 围绕附件中的4种代码写法思维来实现同一个任务, ...
- python version 2.7 required,which was not found in
python version 2.7 required,which was not found in 出现上面这种情况的原因我推测有两种: 1.NumPy和SciPy官方网站上只提供了32bit的文件 ...
- Sublime Text3常用插件以及安装方法(实用)【转载】
https://www.cnblogs.com/liuchaoH/p/6370008.html Package Control组件在线安装 按Ctrl+`调出console(注:避免热键冲突) 粘贴以 ...