代码之家  ›  专栏  ›  技术社区  ›  Vivek Nuna Chetan sabhaya

如何升级中Assets文件夹中的SQLite数据库

  •  -1
  • Vivek Nuna Chetan sabhaya  · 技术社区  · 7 年前

    我有一个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");
            }
        }
    }
    

    我在网上看过很多文章,上面提到资产将是只读的。你不会写字。但这是一个非常基本的要求。我认为对于这种要求必须有一些变通办法。

    更新:

    主要问题是我在应用程序中有WebView。HTML和js文件在Assets文件夹中。我可以升级本地内部存储数据库。但如果我升级数据库,我需要将这些数据发送到assets文件夹中的javascript文件。主要问题是这些数据非常大,大约40 MB。也没有互联网连接,所以你也不能通过网络发送数据。因此,当我尝试将这些数据从本机代码发送到JavaScript代码时,应用程序每次都会崩溃。所以我想把DB放在Assets文件夹中,在本地应用程序中保存一个副本。如果有数据库升级,则升级资产文件夹DB,而不是将此大数据从本机代码发送到JS代码。我到现在为止还没有找到合适的解决办法。

    1 回复  |  直到 7 年前
        1
  •  1
  •   CommonsWare    7 年前

    资源在运行时是只读的。不能从Android应用程序中修改Android应用程序中的资产。更新资产的唯一方法是将新版本的APK与新资产一起发布。

    推荐文章