在构建中的资产中重写SQLite数据库

问题描述

我正在制作一个主要用于个人用途的android应用程序。它与SQLite数据库一起用于存储数据。在android studio中,我将数据库放在src / main / assets /文件夹中,并编写了一种Java方法来复制它,以便在手机上按教程中的指示在内部使用它:

private void copyDatabase(File dbFile) throws IOException {
        InputStream is = context.getAssets().open(DB_NAME);
        OutputStream os = new FileOutputStream(dbFile);

        byte[] buffer = new byte[1024];
        while (is.read(buffer) > 0) {
            os.write(buffer);
        }

        os.flush();
        os.close();
        is.close();
    } 

然后我通过将方法应用于上下文“ this”来复制该数据库并使用它。 我目前在Windows上使用仿真器调试应用程序,每次更改资产文件夹中的数据库时,它们都不会正确部署在虚拟电话上。我必须擦拭手机的内存,然后再次安装该应用程序。有时,该数据库甚至无法正确部署,并且其表也丢失了,这使我有些担心潜在的更新:鉴于我不太了解编译器如何在资源中部署文件,因此我希望提供一些帮助来阐明潜在的问题问题可能存在。 也许有某种指令可以迫使调试器每次编译时重写资产中的所有文件吗?

解决方法

也许有某种指令可以迫使调试器每次编译时重写资产中的所有文件吗?

它会自动执行。

但是,它不会导致问题中的代码自动再次运行。在某个地方,您具有确定何时调用copyDatabase()的代码。可能不会在每次运行该应用程序时都执行此操作,只有在还没有数据库副本的情况下才这样做。

我必须清除手机的内存并重新安装该应用程序

如果我的上述猜测是正确的,则清除应用程序的数据将摆脱旧资产的现有副本,并使您的代码再次调用copyDatabase()并复制新资产。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...