前面两章说了xutils框架的引入和注解模块的使用数据库模块的使用,想了解的朋友可以去看看。

前面在说数据库模块的操作的时候是手动创建数据库并保存在asset文件夹里面,再通过I/O将数据库写进应用里面,这种操作存在的弊端是数据库升级比如在表里面增加字段,或者更改表的字段名称,这时候就不得不删除原来的数据库再创建新的数据库,在新的数据库里面存储用户数据了,这是强烈不允许的,由于这个操作挖下的坑使笔者在项目进行版本迭代的时候忙得焦头烂额,于是就使用了第二种方法。

自动创建数据库并通过更改数据库的版本号对数据库进行升级

一 在openDb的时候进行以下操作:

private DbUtils UserInfoUtils;            

DbUtils.DaoConfig config = new DbUtils.DaoConfig(mContext);
config.setDbName("USER_INFO.db");//数据库名称
config.setDbVersion(1);//数据库版本
config.setDbDir(ApplicationConstans.getLocalDefaultPath());//数据库保存的位置
userInfoDbUtils = DbUtils.create(config);
userInfoDbUtils.createTableIfNotExist(User.class);

我们可以在config下面的方法做许多事情,比如数据库的存储位置,版本号,数据库名称的创建等。

前面的UserInfo实体对象还是不变。

在使用的时候直接这样就可以了。

UserInfo user = new UserInfo();
user.setUserName("Bob");
user.setPassword("111112221");
LoginService.getInstance(mContext).saveUser(user);

上面是数据库里面保存的数据。

二 数据库版本更新
① 首先将openDb的方法里面将版本号改为2
config.setDbVersion(2);
② 然后将表里面增加或修改的字段名称写进UserInfo对象里面就可以了。这样就完成了数据库版本更新的操作了。

下面是UserInfo的更改后的代码:

/**
* Created by Bob on 2016/6/14.
*/
@Table(name = "UserDB")
public class User { @Column(column = "id")
private int id; @Column(column = "user_name")
private String userName; @Column(column = "password")
private String password; @Column(column = "describe")
private String describe; @Column(column = "department")
private String department; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getUserName() {
return userName;
} public void setUserName(String userName) {
this.userName = userName;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} public String getDescribe() {
return describe;
} public void setDescribe(String describe) {
this.describe = describe;
} public String getDepartment() {
return department;
} public void setDepartment(String department) {
this.department = department;
}
}

我增加了describe和department的字段

下面是更新后数据库里面存储的数据

其次,在进行数据插入的时候进行了一点小小的优化,就是如果数据库里面的已经存在该数据,然后再去比对数据是否是新数据如果是新数据就删除原来的数据,保存新数据。(这里有一点小的纰漏,就是有个数据的更新操作,但是我不知道怎么用,如果大家知道怎么用的话,麻烦告诉一声。)

 public void saveUser(User user){
User pUser = getUserInfoByName(user.getUserName());
try{
if(null == pUser){
dbUtils.save(user);
}else if(!pUser.getPassword().equals(user.getPassword())){//如果数据库里面的用户密码和传进来的用户的用户密码不一样的话就删除原来的数据保存新数据,这是一个权宜之计,因为以前学数据库的时候记得有个更新数据的操作,但是忘记了怎么用了。
deleteUser(pUser);
dbUtils.save(user);
}
}catch (DbException e){
e.printStackTrace();
}
} public void deleteUser(User user){//删除用户数据
try{
dbUtils.delete(user);
}catch (DbException e){
e.printStackTrace();
}
}

XUTils框架的学习(三)的更多相关文章

  1. xUTils框架的学习(二)

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

  2. XUtils框架的学习(一)

    一  xutils框架引入到AndroidStudio工程,最简单的方法:① 在APP的build.gradle里面加入 compile 'org.xutils:xutils:3.3.36'.② 一定 ...

  3. (转)MyBatis框架的学习(三)——Dao层开发方法

    http://blog.csdn.net/yerenyuan_pku/article/details/71700957 使用MyBatis开发Dao层,通常有两个方法,即原始Dao开发方法和Mappe ...

  4. xUtils框架介绍(三)

    接上回,继续介绍xUtils的最后两个模块:DbUtils和HttpUtils.首先先介绍第一个SQLite数据库操纵的简单ORM框架,只要能理解xUtils为我们提供的api,相信你也能熟练的把Db ...

  5. (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql

    http://blog.csdn.net/yerenyuan_pku/article/details/71893689 前面对MyBatis框架的学习中,我们对Mapper.xml映射文件多少有些了解 ...

  6. 精通ASP.Net MVC 3 框架(第三版)学习笔记

    精通ASP.Net MVC 3 框架(第三版)学习笔记 代码才是王道. http://pan.baidu.com/s/1pJyL1cn

  7. Struts2框架学习(三) 数据处理

    Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...

  8. 【STM32H7教程】第12章 STM32H7的HAL库框架设计学习

    完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第12章       STM32H7的HAL库框架设计学 ...

  9. [ZZ] 深度学习三巨头之一来清华演讲了,你只需要知道这7点

    深度学习三巨头之一来清华演讲了,你只需要知道这7点 http://wemedia.ifeng.com/10939074/wemedia.shtml Yann LeCun还提到了一项FAIR开发的,用于 ...

随机推荐

  1. objective-c内存管理中autorelease的作用

    //创建自动释放池 @autoreleasepool { //autorelease会将对象放入自动释放池中,并返回该对象本身 //当自动释放池销毁时,将自动调用对象的release方法 Person ...

  2. objective-c在Xcode中@property相关参数的解释

    objective-c在其对象拥有成员变量时,我们为了保持代码的封装,会将成员变量设置为@protected,并为成员变量编写setter和getter方法. 如: @interface Person ...

  3. java I/O技术

    一.流的分类 Java的流类大部分都是由InputStream.OutputStream.Reader和Writer这四个抽象类派生出来的 (1)按数据流向 输入流(InputStream类和Read ...

  4. 2014年12月20日00:33:14-遮罩+进度条-extjs form.isvalid

    1.Extjs : 遮罩+进度条 2.Extjs: extjs form.isvalid http://stackoverflow.com/questions/19354433/extjs-form- ...

  5. 深入了解absolute

    1.absolute与float的相同的特性表现  a.包裹性  b.破坏性:父元素没有设置高或宽,父元素的高或宽取决于这个元素的内容  c.不能同时存在 2.absolute独立使用,不与relat ...

  6. 手机摇一摇效果-html5

    1.手机摇一摇效果实现 2.播放声音 <!DOCTYPE html> <html lang="en"> <head> <meta char ...

  7. 小笔记(三):PHP使用thinkphp3.2.3对数组进行分页

    之前写过thinkphp3.2.3直接在查询数据的时候进行分页,前段时间用到了将查询之后的数组进行整理后进行分页,用到的一个函数array_slice($arr, $start, $length,tr ...

  8. 10分钟进阶Nuget

    nuget是什么 .net版的maven(java)? 如果你用过windows的chocolatey,mac的homebrew或许更容易理解他,先来回顾下以前我们是如何处理或者碰到过的问题. 1.假 ...

  9. Flume用来收集日志,zeppelin用来展示

    Flume:Flume是一个分布式,可依赖的,用于高效率的收集.聚类.移动大量数据的服务.Flume使用基于流数据的简单而且可扩展的架构.由于拥有可调的依赖机制和许多故障恢复机制,Flume是健壮而且 ...

  10. 动画讲解 Eclipse 常用快捷键

    Eclipse有强大的编辑功能, 工欲善其事,必先利其器, 掌握Eclipse快捷键,可以大大提高工作效率. 小坦克我花了一整天时间, 精选了一些常用的快捷键操作,并且精心录制了动画, 让你一看就会. ...