前面两章说了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. OC与Swift的区别二(常量、变量、运算符)

    4.常量与变量声明 oc的变量声明使用  类型 变量名 = 变量值的方式,其中类型为系统内置数据类型或自定义类型,变量名需由英文字母开头且不能包含特殊字符 swift变量声明使用 var 变量名 = ...

  2. Google Android SDK开发范例------------20141119

    一.Edit和Checkbox完成对登陆密码的查看:添加Edit的setOnCheckedChageListener和对CheckBox的状态通过isCHecked判断 大体代码如下 CheckBox ...

  3. Telerik柱状图(1)

    此随笔主要是介绍一下Telerik的柱状图控件中的一种.效果图为: 此图展示了五个人每个季度的绩效成绩,用图形方式展示数据可以让用户更直观的去看数据,分析数据,不多说了,在这个分享一下我录得视频讲解, ...

  4. 使用jeesite org.springframework.beans.NotReadablePropertyException: Invalid property 'tfxqCmsAccount.id' of bean class

    一对多 对子表添加时在form表单 path="tfxqCmsAccount.id"页面报错,对比了下其他可行的,发现其自动生成的子类少了个构造方法 加上 public TfxqC ...

  5. 还在在专业的blog记录生活吧!

    本来觉得自己写文章水平很烂,技术贴也不能保证分析清晰透彻,就决定在百度hi上记录生活随笔.的. 但是,在百度,随便写点啥,都要审核.申诉. 还是在博客园安家吧. 从新手做起.

  6. hibernate细节一

    public void saveUser(){        Session session=JdbcUtil.getSession();        User user=new User();   ...

  7. docker私有仓库

    1.docker pull registry 2.sudo docker run -d -p 5000:5000 registry 默认情况下,会将仓库存放于容器内的/tmp/registry目录下, ...

  8. sort对象数组排序

    function objectSort(property, desc) { //降序排列 if (desc) { return function (a, b) { return (a[property ...

  9. Ajax 异步 XMLHttpRequest

    1.GET方式             1.1设置参数             xhr.open("GET", "GetAreasByAjax.ashx?isAjax=1 ...

  10. PHP框架原理

    本文主要来聊聊框架理论,但不针对任何一款框架,不过任何一款框架都离不开这个理论,首先我们了解下框架的来龙去脉,任何技术的出现都是为了解决某个问题,之前的博客有讲过smarty,其存在就是为了html和 ...