如何在

时间:2018-08-23 11:38:49

标签: java android sqlite

我有一个Android应用程序,其中在Assets文件夹中创建了一个SQLite数据库。现在,我要升级Assets文件夹中的该数据库,但是它只允许升级本地内部存储数据库,而不能升级Assets文件夹中的本地内部存储数据库。

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {      
    if (newVersion > oldVersion) {
        switch (oldVersion) {
            case 1:
                executeSQLScript(database, "update_v2.sql");
            case 2:
                executeSQLScript(database, "update_v3.sql");
        }
    }
}

因此,我认为升级Assets文件夹数据库的唯一方法是手动更改数据库文件并更新apk。但是我希望以编程方式完成此任务,并且也无需更改apk。例如从某些服务器获取最新的数据库更改并更新资产文件夹数据库。

我在互联网上浏览了许多文章,其中提到资产将为ReadOnly。你不能写。但这是一个非常基本的要求。我认为对于这种要求必须有一些解决方法。

因此,简而言之,我的问题是,这有可能在不更改代码的情况下升级数据库(升级apk)吗?

更新

主要问题是我在应用程序中有WebView。 HTML和js文件位于Assets文件夹中。我可以升级本地内部存储数据库。但是,如果我升级数据库,则需要将此数据发送到资产文件夹中的javascript文件。主要问题是此数据非常大,大约40 MB。也没有互联网连接,因此您也无法通过网络发送数据。因此,当我尝试将此数据从本机代码发送到JavaScript代码时,应用程序每次都崩溃。所以我想将数据库放在Assets文件夹中,并在本机应用程序中保留一个副本。如果要进行数据库升级,请升级Assets文件夹数据库,而不是将大量数据从本机代码发送到JS代码。到目前为止,我还没有找到任何合适的解决方案。

1 个答案:

答案 0 :(得分:1)

资产在运行时为只读。您无法在Android应用程序中修改Android应用程序中的资产。更新资产的唯一方法是使用新资产发布新版本的APK。