基于Android SQLite的升级详解

做Android应用,不可避免的会与SQLite打交道。随着应用的不断升级,原有的数据库结构可能已经不再适应新的功能,这时候,就需要对SQLite数据库的结构进行升级了。

SQLite提供了ALTER TABLE命令,允许用户重命名或添加新的字段到已有表中,但是不能从表中删除字段。

并且只能在表的末尾添加字段,比如,为 Subscription添加两个字段:


代码如下:

ALTER TABLE Subscription ADD COLUMN Activation BLOB;
ALTER TABLE Subscription ADD COLUMN Key BLOB;

另外,如果遇到复杂的修改操作,比如在修改的同时,需要进行数据的转移,那么可以采取在一个事务中执行如下语句来实现修改表的需求。

1. 将表名改为临时表


代码如下:

ALTER TABLE Subscription RENAME TO __temp__Subscription;

2. 创建新表


代码如下:

CREATE TABLE Subscription (OrderId VARCHAR(32) PRIMARY KEY ,UserName VARCHAR(32) NOT NULL ,ProductId VARCHAR(16) NOT NULL);

3. 导入数据


代码如下:

INSERT INTO Subscription SELECT OrderId, “”, ProductId FROM __temp__Subscription;

或者


代码如下:

INSERT INTO Subscription() SELECT OrderId, “”, ProductId FROM __temp__Subscription;

* 注意 双引号”” 是用来补充原来不存在的数据的
4. 删除临时表


代码如下:

DROP TABLE __temp__Subscription;

通过以上四个步骤,就可以完成旧数据库结构向新数据库结构的迁移,并且其中还可以保证数据不会应为升级而流失。

当然,如果遇到减少字段的情况,也可以通过创建临时表的方式来实现。

(0)

相关推荐

  • android实现程序自动升级到安装示例分享(下载android程序安装包)

    复制代码 代码如下: //程序下载升级 zhouxiang@JavascriptInterfacepublic void UpdateCAECP(final String path){try{AlertDialog.Builder builder = new Builder((Context)obj);builder.setMessage("检测到有新版本发布,是否进行下载升级?");builder.setTitle("程序更新提示");builder.setPos

  • c#使用xamarin编写拨打电话程序

    xamarin 可以很方便的编写一个电话拨号程序,下面的代码是调用android系统的拨号功能,拨号前会给出一个提示信息. callButton是一个用来拨号的按钮,我们使用它的点击事件来进行拨号,拨号前会有一个提示框 callButton.Click += (object sender, EventArgs e) => { // On "Call" button click, try to dial phone number. sharejs.com var callDialo

  • Android增量升级的方法和原理详细介绍

    总结:我们使用delta编码算法减少Android应用升级程序的大小.我们通过bsdiff和bspatch工具在android上实现delta编码算法.服务器软件和android应用已经部署.当前,我们能够减少Android升级流量的50%,如果大量的部署,这将会减少网络的压力. 升级机制:我们打算采用delta编码的patch升级Android应用.新的升级机制可以描述如下: 1.  在服务器上生成一个patch.2.  下载patch到手机中.3.  通过补丁获取一个已安装应用的新的安装ap

  • Android将Xamarin For VS升级为4.1.0.530版教程

    一.Xamarin for VS的版本简介 下面是Xamarin for VS发布的版本简介: --更早的版本(略) 2015年11月发布:Xamarin for VS 4.0.0.1717 Stable版(收费) 2016年3月发布:Xamarin for VS 4.0.1.145 Stable版(收费) 2016年5月发布:Xamarin for VS 4.0.4.4 Stable版(企业版,免费) 2016年6月发布:Xamarin for VS 4.1.0.530 Stable版(企业版

  • Android编程实现自动检测版本及自动升级的方法

    本文实例讲述了Android编程实现自动检测版本及自动升级的方法.分享给大家供大家参考,具体如下: 步骤: 1.检测当前版本的信息AndroidManifest.xml-->manifest-->android:versionName. 2.从服务器获取版本号(版本号存在于xml文件中)并与当前检测到的版本进行匹配,如果不匹配,提示用户进行升级,如果匹配则进入程序主界面. 3.当提示用户进行版本升级时,如果用户点击了确定,系统将自动从服务器上下载并进行自动升级,如果点击取消将进入程序主界面.

  • Android实现创建或升级数据库时执行语句

    本文实例讲述了Android创建或升级数据库时执行的语句,如果是创建或升级数据库,请使用带List参数的构造方法,带SQL语句的构造方法将在数据库创建或升级时执行. 具体程序代码如下: import java.util.List; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFac

  • 基于Android SQLite的升级详解

    做Android应用,不可避免的会与SQLite打交道.随着应用的不断升级,原有的数据库结构可能已经不再适应新的功能,这时候,就需要对SQLite数据库的结构进行升级了. SQLite提供了ALTER TABLE命令,允许用户重命名或添加新的字段到已有表中,但是不能从表中删除字段. 并且只能在表的末尾添加字段,比如,为 Subscription添加两个字段: 复制代码 代码如下: ALTER TABLE Subscription ADD COLUMN Activation BLOB;ALTER

  • 基于Android RxCache使用方法详解

    前言 我为什么使用这个库? 事实上Android开发中缓存功能的实现选择有很多种,File缓存,SP缓存,或者数据库缓存,当然还有一些简单的库/工具类,比如github上的这个: [ASimpleCache]:a simple cache for android and java 但是都不是很好用(虽然可能学习成本比较低,因为它使用起来相对简单),我可能需要很多的静态常量来作为key存储缓存数据value,并设置缓存的有效期,这可能需要很多Java代码去实现,并且过程繁琐. 如果您使用的网络请求

  • 基于Android FileProvider 属性配置详解及FileProvider多节点问题

    众所周知在android7.0,修改了对私有存储的限制,导致在获取资源的时候,不能通过Uri.fromFile来获取uri了我们需要适配7.0+的机型需要这样写: 1:代码适配 if (Build.VERSION.SDK_INT > 23) {// intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); Uri contentUri = FileProvider.getUriForFile(context, SysInfo.packageN

  • Android SQLite基本用法详解

    目录 一.SQLite的介绍 1.SQLite简介 2.SQLite的特点: 3.SQLite数据类型 二.SQLiteDatabase的介绍 1.打开或者创建数据库 2.创建表 3.插入数据 4.删除数据 5.修改数据 6.查询数据 7.删除指定表 三. SQLiteOpenHelper 1.onCreate(SQLiteDatabase) 2.  onUpgrade(SQLiteDatabase,int,int)  3.  onOpen(SQLiteDatabase): 一.SQLite的介

  • 基于Android ContentProvider的总结详解

    1.适用场景1) ContentProvider为存储和读取数据提供了统一的接口2) 使用ContentProvider,应用程序可以实现数据共享3) android内置的许多数据都是使用ContentProvider形式,供开发者调用的(如视频,音频,图片,通讯录等)2.相关概念介绍1)ContentProvider简介当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的

  • 基于AnDroid FrameLayout的使用详解

    今天在学习实现墨迹天气那样的拖动效果时,看到用的是重写FrameLayout.翻了翻书,突然想明白,为什么用FrameLayout.在FrameLayout中,用我看的书中的话说是,空间永远用不完. 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?><FrameLayout    xmlns:android="http://schemas.android.com/apk/res/androi

  • Android中SQLite 使用方法详解

    Android中SQLite 使用方法详解 现在的主流移动设备像android.iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上的SQLite开发技巧.对于Android平台来说,系统内置了丰富的API来供开发人员操作SQLite,我们可以轻松的完成对数据的存取. 下面就向大家介绍一下SQLite常用的操作方法,为了方便,我将代码写在了Activity的onCreate中: @Ov

  • 基于Python的Android图形解锁程序详解

    安卓手机的图形锁是3x3的点阵,按次序连接数个点从而达到锁定/解锁的功能.最少需要连接4个点,最多能连接9个点.网上也有暴力删除手机图形锁的方法,即直接干掉图形锁功能.但假如你想进入别人的手机,但又不想引起其警觉的话--你可以参考一下本文(前提条件:手机需要root,而且打开调试模式.一般来讲,如果用过诸如"豌豆荚手机助手"."360手机助手"一类的软件,都会被要求打开调试模式的.如果要删除手机内置软件,则需要将手机root). 首先科普一下,安卓手机是如何标记这9

  • 基于VSTS的Xamarin.Android持续集成步骤详解

    目录 Build Agent 环境需求 Build的部分分为以下步骤 1. 还原NuGet包 2. 替换版本号 3. 编译Android程序 4. 获取编译Andorid的AndroidManifest数据 5. 对编译好的Android apk进行签名 6. 删除多余的文件 7. 生成 ReleaseNotes 8. 生成预发布脚本 这些天做了一个,这里分享下 Build Agent 环境需求 DotNetFramework msbuild visualstudio AndroidSDK JD

  • Android LitePal的使用详解

    前言 数据库操作一直都是比较繁琐而且单一的东西,平时开发中数据库也很常见.有学过mysql的读者可能会觉得sql语句确实让人很难受.同样android中,虽然有内置数据库SQLite,但是操作起来还是非常的不方便.跟网络请求类似,当我们用原生的HttpURLConnection请求数据再用json解析,过程很繁琐,所以我们一般是封装成一个工具类,但是retrofit出现了,他帮我们解决了网络请求和解析数据的封装,同时还支持RxJava的异步,十分强大.不了解retrofit的读者也建议你们去学习

随机推荐