使用SQLite数据库文件更新在Update / Upgrade节点中发布应用程序

时间:2011-08-17 12:19:20

标签: android sqlite mode

我开发了一个Android应用程序,可访问应用程序内的本地sqlite数据库。

我有一个关于如何升级应用的问题。在这种情况下,如果应用程序源代码更改或数据库数据/结构发生更改,我该如何打包这些更改?

我是否必须重新打包完整的应用并将其作为新的应用版本提供?或者我可以只将已更改的文件打包成更小的构建大小并将其推向市场?

一般来说,应用程序升级/更新过程是如何进行的?

3 个答案:

答案 0 :(得分:1)

如果你正在扩展SQLiteOpenHelper(你应该),它的构造函数会获取一个版本参数,这是一个整数值,你应该在某个常量中定义DATABASE_VERSION

重写onUpgrade方法并实现升级架构和/或数据的逻辑。

当您增加DATABASE_VERSION常量(例如在应用更新中)时,任何具有较低版本的现有安装都会触发onUpgrade中的代码。

答案 1 :(得分:0)

更改数据库的DATABASE_VERSION,下次启动应用程序 将重新创建数据库。

答案 2 :(得分:0)

对于这两者,您基本上只是从Eclipse导出新版本的应用程序,并通过您的市场帐户上传新的APK。

应用程序版本更改由清单中的标记处理:android:versionCode。每次导出更新的APK时,都需要增加版本代码。 versionName只是向市场中的用户显示的标签,也可以是您喜欢的任何标签。

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.package"
    android:installLocation="auto"
    android:versionCode="17"
    android:versionName="0.74">
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="12" />
    <uses-permission
        android:name="android.permission.INTERNET"></uses-permission>
    ...

对于数据库,最简单的方法是子类SQLiteOpenHelper。然后,在您的子类中,您可以使用以下内容:

private class DBHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "mydatabase.db";
    private static final int DATABASE_VERSION = 45;

    public DBHelper(Context context)
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    ...

SQLiteOpenHelper处理打开数据库,并在应用程序启动时进行更新。在上面的示例中,数据库版本为45.如果您将其增加,并将新APK上载到市场,则会调用onUpgrade()方法,从而允许您将用户旧数据库更新为新版本。