public abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int new Version) 這個方法在實現時需要重寫。

 
public abstract void onUpgrade(SQLiteDatabase db,int oldVersion,int new Version)

這個方法在實現時需要重寫。

onUpgrade方法會在數據庫需要升級的時候調用。可以用來增刪表或者其他任何操作。如果你想添加新的列你可以使用ALTER TABLE 插入表中。如果需要重命名或者刪掉列,可以使用ALTER TABLE 重命名舊表,然後創建新的表,並將舊表數據添加到新表中。如果拋出異常,將自動回滾。

1. 幫助文檔裏說的“數據庫升級”是指什麼?

你開發了一個程序,當前是1.0版本。該程序用到了數據庫。到1.1版本時,你在數據庫的某個表中增加了一個字段。那麼軟件1.0版本用的數據庫在軟件1.1版本就要被升級了。

2. 數據庫升級應該注意什麼?

軟件的1.0版本升級到1.1版本時,老的數據不能丟。那麼在1.1版本的程序中就要有地方能夠檢測出來新的軟件版本與老的數據庫不兼容,並且能夠有辦法把1.0軟件的數據庫升級到1.1軟件能夠使用的數據庫。換句話說,要在1.0軟件的數據庫的那個表中增加那個字段,並賦予這個字段默認值。

3. 程序如何知道數據庫需要升級?

SQLiteOpenHelper類的構造函數有一個参數是int version,它的意思就是指數據庫版本號。比如在軟件1.0版本中,我們使用SQLiteOpenHelper訪問數據庫時,該参數为1,那麼數據庫版本號1就會寫在我們的數據庫中。

到了1.1版本,我們的數據庫需要發生變化,那麼我們1.1版本的程序中就要使用一個大於1的整數來構造SQLiteOpenHelper類,用於訪問新的數據庫,比如2。

當我們的1.1新程序讀取1.0版本的老數據庫時,就發現老數據庫裏存儲的數據庫版本是1,而我們新程序訪問它時填的版本號为2,系統就知道數據庫需要升級。

4. 何時觸發數據庫升級?如何升級?

當系統在構造SQLiteOpenHelper類的對象時,如果發現版本號不一样,就會自動調用onUpgrade函數,讓你在這裏對數據庫進行升級。根據上述場景,在這個函數中把老版本數據庫的相應表中增加字段,並给每條記錄增加默認值即可。

新版本號和老版本號都會作为onUpgrade函數的参數傳進來,便於開發者知道數據庫應該從哪個版本升級到哪個版本。

升級完成後,數據庫會自動存儲最新的版本號为當前數據庫版本號。

-----------------------------------------------------------------------------------------------------------------

上面采用的是SQLiteOpenHelper中的onUpgrade方法實現數據庫的升級。

首先獲取Context:

private Context  mContext=this;

然後實現FinalDb內的靜態方法:

FinalDb.create(mContext,"afinal.db",true,2,this);

實現FinalDb的DbUpdateListener接口中的方法:

@Override
public void onUpgrade(SQLiteDatabase db, int arg1, int arg2) { // TODO Auto-generated method stub
try {
InputStream in = mContext.getAssets().open("patch.sql");
BufferedReader bufferedReader = new BufferedReader(
new InputStreamReader(in));
String sqlUpdate = null;
while ((sqlUpdate = bufferedReader.readLine()) != null) {
if (!TextUtils.isEmpty(sqlUpdate)) {
db.execSQL(sqlUpdate);
}
}
bufferedReader.close();
in.close();
} catch (SQLException e) {
System.out.println(e.toString());
} catch (IOException e) {
System.out.println(e.toString());
}
}

時間緊迫,沒有寫太多,大家可以自己研究。

在Android中afinal框架下實現sqlite數據庫版本升級的辦法的更多相关文章

  1. 在Android中afinal框架下实现sqlite数据库版本升级的办法

    上一篇文章采用的是SQLiteOpenHelper中的onUpgrade方法实现数据库的升级. 首先获取Context: private Context mContext=this; 然后实现Fina ...

  2. C#在sql中使用變量訪問Oracle數據庫

    1.首先創建一個測試數據表 CREATE TABLE people ( SNO BYTE), SNAME BYTE), SSEX BYTE), SAGE number, SDEPT BYTE), BT ...

  3. android的Afinal框架下的数据库更新

    项目需要,版本升级时给表添加了一些新的字段,发现出现异常. 解决方法:监听数据库的版本号,更新数据库. 创建FinalDb对象时使用如下的构造函数,监听版本号的变化: db = FinalDb.cre ...

  4. [转]Android中Xposed框架篇—利用Xposed框架实现拦截系统方法

    一.前言 关于Xposed框架相信大家应该不陌生了,他是Android中Hook技术的一个著名的框架,还有一个框架是CydiaSubstrate,但是这个框架是收费的,而且个人觉得不怎么好用,而Xpo ...

  5. React-Native 之 GD (二十)removeClippedSubviews / modal放置的顺序 / Android 加载git图\动图 / 去除 Android 中输入框的下划线 / navigationBar

    1.removeClippedSubviews 用于提升大列表的滚动性能.需要给行容器添加样式overflow:’hidden’.(Android已默认添加此样式)此属性默认开启 这个属性是因为在早期 ...

  6. [转载] Android中Xposed框架篇---利用Xposed框架实现拦截系统方法

    本文转载自: http://www.wjdiankong.cn/android%E4%B8%ADxposed%E6%A1%86%E6%9E%B6%E7%AF%87-%E5%88%A9%E7%94%A8 ...

  7. nodejs 中koa框架下的微信公众号开发初始篇

    最近在搞微信公众号开发,后端采用的是nodejs下的koa框架,初识后端的菜鸟,自己搞难度太大了,网上找了很多文章,采用的中间件大都是express框架下的,不过好在爬了许多坑之后总算看见点曙光了,遂 ...

  8. afinal框架下 ViewInject的使用

    1.可以在BaseActivity界面onCreate 方法setContentView后加上该语句. initInjectedView(this); 2.@ViewInject(id=R.id.v_ ...

  9. mono for android中使用dapper或petapoco对sqlite进行数据操作

    在mono for android中使用dapper或petapoco,很简单,新建android 类库项目,直接把原来的文件复制过来,对Connection连接报错部分进行注释和修改就可以运行了.( ...

随机推荐

  1. 利用matplotlib的plot函数实现图像绘制

    模式识别的一个实验,要求画出贝叶斯决策的图.这里我是利用python中的matplotlib库实现的图线的拟合.主要对于matplotlib的使用可以参照博客:webary 如果要绘制三维图像可以参考 ...

  2. Java Web应用开发中的一些概念

    最近在学习Java Web,发现Java Web的概念很多,而且各个概念之间的关系也挺复杂,本篇博客把这些关系总结于此,主要参考的博客附在文章末尾. 概念 服务器 服务器,硬件角度上说就是一台高性能的 ...

  3. Spark Streaming简介及原理

    简介: SparkStreaming是一套框架. SparkStreaming是Spark核心API的一个扩展,可以实现高吞吐量的,具备容错机制的实时流数据处理. 支持多种数据源获取数据: Spark ...

  4. PHP从入门到精通(一)

    (一)PHP简介和基本知识 PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于 ...

  5. sql 语句的先后执行顺序

    例:查询语句中select from where group by having order by的执行顺序 一般以为会按照逻辑思维执行,为: 查询中用到的关键词主要包含六个,并且他们的顺序依次为  ...

  6. Leetcode——66.加一

    @author: ZZQ @software: PyCharm @file: leetcode66_加一.py @time: 2018/11/29 16:07 要求:给定一个由整数组成的非空数组所表示 ...

  7. 每天学习SQL

    SELECT table_name FROM information_schema.tables WHERE table_schema='survey170227_main' AND table_na ...

  8. Ubuntu设置静态IP的方法

    通过修改配置文件/etc/network/interfaces,如果/etc/resolv.conf中提示nameserver会被resolvconf修改,是临时文件,那么dns server也可以在 ...

  9. 转载:必须收藏!50个最流行的免费Kubernetes工具集

    必须收藏!50个最流行的免费Kubernetes工具集 http://cloud.51cto.com/art/201806/576406.htm 在短短的两年时间里,Kubernetes在容器编排的竞 ...

  10. 什么样的 GitHub 才适合放简历上?

    为什么 GitHub 可以加分? 很多招聘描述上面都会备注 GitHub 是加分项,那么为什么它是加分项呢? 停,如果看到这里你还不知道 GitHub 是什么,可以看一下 Phodal的手记:http ...