XUTils框架的学习(三)
前面两章说了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框架的学习(三)的更多相关文章
- xUTils框架的学习(二)
这章讲的是框架的DbUtils模块的学习 三 xUtils框架的DButils模块 最开始接触这个框架就是从数据库模块开始的.当时的需求是需要记录用户的登录数据,保存在本地以便进行离线登录.首先想到的 ...
- XUtils框架的学习(一)
一 xutils框架引入到AndroidStudio工程,最简单的方法:① 在APP的build.gradle里面加入 compile 'org.xutils:xutils:3.3.36'.② 一定 ...
- (转)MyBatis框架的学习(三)——Dao层开发方法
http://blog.csdn.net/yerenyuan_pku/article/details/71700957 使用MyBatis开发Dao层,通常有两个方法,即原始Dao开发方法和Mappe ...
- xUtils框架介绍(三)
接上回,继续介绍xUtils的最后两个模块:DbUtils和HttpUtils.首先先介绍第一个SQLite数据库操纵的简单ORM框架,只要能理解xUtils为我们提供的api,相信你也能熟练的把Db ...
- (转)MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql
http://blog.csdn.net/yerenyuan_pku/article/details/71893689 前面对MyBatis框架的学习中,我们对Mapper.xml映射文件多少有些了解 ...
- 精通ASP.Net MVC 3 框架(第三版)学习笔记
精通ASP.Net MVC 3 框架(第三版)学习笔记 代码才是王道. http://pan.baidu.com/s/1pJyL1cn
- Struts2框架学习(三) 数据处理
Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...
- 【STM32H7教程】第12章 STM32H7的HAL库框架设计学习
完整教程下载地址:http://forum.armfly.com/forum.php?mod=viewthread&tid=86980 第12章 STM32H7的HAL库框架设计学 ...
- [ZZ] 深度学习三巨头之一来清华演讲了,你只需要知道这7点
深度学习三巨头之一来清华演讲了,你只需要知道这7点 http://wemedia.ifeng.com/10939074/wemedia.shtml Yann LeCun还提到了一项FAIR开发的,用于 ...
随机推荐
- ios objection
给大家介绍个不错的团队开发模块化工具objection 1. setup<这里我只介绍ios相关> rake artifact:ios cp -R build/Release-iphone ...
- Xcode中实现ARC和MRC混编
1.在Xcode中打开项目文件 2.选中项目名称 3.在右侧选择build phass 选项卡 4.选择 complite source 选项 5.选择要支持MRC编译的.m文件,双击 6.在弹出的框 ...
- 关于网页强制被跳转到wpkg.org的解决
今天登陆MIT的网站看一篇文章,在进入到页面的时候,网页就会自动跳转到wpkg.org这个网页,查了下据说是DNS被污染了,暂时还是不是很清楚,先把问题解决了. 方法: 在C:\WINDOWS\sys ...
- 选择第n小的元素之python实现源码
def partition(A, p, r): j = p+1 for i in range(p+1, r+1): if(A[i] < A[p]): tmp = A[i] A[i] = A[j] ...
- 九度0J 1374 所有员工年龄排序
题目地址:http://ac.jobdu.com/problem.php?pid=1374 题目描述: 公司现在要对所有员工的年龄进行排序,因为公司员工的人数非常多,所以要求排序算法的效率要非常高,你 ...
- PHP trim去空格函数
trim() 能除去的字符有“ ”空格."\t"水平制表符."\n"换行符."\r"回车符."\0字符串结束符".&qu ...
- mysqli和mysql和pdo查询
mysql mysql_connect($db_host, $db_user, $db_password); mysql_select_db($dn_name); $result = mysql_ ...
- Redis的PHP操作手册(自用)
String 类型操作 string是redis最基本的类型,而且string类型是二进制安全的.意思是redis的string可以包含任何数据.比如jpg图片或者序列化的对象 $redis-> ...
- PHP 自 5.2 到 5.6 中新增的功能详解
截至目前(2014.2), PHP 的最新稳定版本是 PHP5.5, 但有差不多一半的用户仍在使用已经不在维护 [注] 的 PHP5.2, 其余的一半用户在使用 PHP5.3 [注].因为 PHP 那 ...
- C#正则表达式Regex类使用
作为文本处理的利器——Perl语言对正则表达式的最强大支持起到了重要的作用,正因为如此,许多其他语言在加入正则表达式引擎的时候都会或多或少的兼顾perl风格的正则表达式,开发出相应的引擎.本人使用pe ...