前面两章说了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();
}
}

随机推荐

  1. 遥感影像滤波处理软件 — timesat3.2

    最近因为要做遥感影像的滤波处理,经过女神推荐,决定用Timesat,可是该软件3.1版本只适合xp系统以及2011的matlab,后来在官网上找到了最新的3.2版本.支持64位操作系统以及2014的m ...

  2. 第二周:If判断语句程序当中的作用简介

    1.If语句的作用: 在我们编写程序时经常会遇到内容判断的问题,比如判断内容的真假或者值的大小分别输出内容的问题 这时就会用到我们的If判断语句了,顾名思义,if在英文单词中意思为如果,在Java中他 ...

  3. MYSQL使用mysqldump导出某个表的部分数据

    命令格式如下: mysqldump -u用户名 -p密码 数据库名 表名 --where="筛选条件" > 导出文件路径 例子: 从meteo数据库的sdata表中导出sen ...

  4. 【转】常用css命名规则

    常用的css命名规则 头:header 内容:content/container 尾:footer 导航:nav 侧栏:sidebar 栏目:column 页面外围控制整体布局宽度:wrapper 左 ...

  5. 转:SDL2源代码分析

    1:初始化(SDL_Init()) SDL简介 有关SDL的简介在<最简单的视音频播放示例7:SDL2播放RGB/YUV>以及<最简单的视音频播放示例9:SDL2播放PCM>中 ...

  6. UIPageControl

    UIPageControl 1.    numberOfPages // 设置有多少页默认为0 // 2) 设置页数 [pageControl setNumberOfPages:kImageCount ...

  7. Android中的Handler机制

    直接在UI线程中开启子线程来更新TextView显示的内容,运行程序我们会发现,如下错 误:android.view.ViewRoot$CalledFromWrongThreadException: ...

  8. 流量分析 seo alexa 排名

    百度权重 举例,百度搜索中输入"中医百科" ,排名前三的: http://www.a-hospital.com/w/中医 1. url是关键词的方式,包含中文名,说明当前百度的搜索 ...

  9. Pop Sequence

    题目来源:PTA02-线性结构3 Pop Sequence   (25分) Question:Given a stack which can keep M numbers at most. Push ...

  10. 【 D3.js 高级系列 — 1.0 】 文本的换行

    在 SVG 中添加文本是使用 text 元素.但是,这个元素不能够自动换行,超出的部分就显示不出来了,怎么办呢? 高级系列开篇前言 从今天开始写高级系列教程.还是那句话,由于本人实力有限,不一定保证入 ...