数据库丢失在项目中-不在资产中

时间:2018-11-14 02:50:20

标签: android database sqlite android-studio

通常要在数据库中进行更改,我遵循以下步骤:

  • 在SQLite中编辑的数据库
  • 删除资产文件夹中的数据库
  • 再次将粘贴数据库复制粘贴到资产文件夹中
  • 通过设置从手机中删除该应用程序
  • 重建/安装应用程序

这对我来说已经很多次了。不,我的问题是我的项目不再以某种方式访问​​此数据库。

我发现这是通过从资产文件夹中删除数据库并重新安装该应用程序来解决的。该应用程序仍然可以运行,因此,据我所知,它无法从我之前使用的资产文件夹中访问数据库。

我正在使用以下路径访问它:

DB_Path = mContext.getDatabasePath(DB_Name).
Log.e("DB_path", DB_Path);

哪个产量

.com.example.chris.projectartifact E/DB_path:/data/user/0/com.example.chris.projectartifact/databases/myDB.db

关于评论:

我正在使用以下方法复制我的数据库。 这是来自一个教程,并且在很长一段时间内都运行良好。 据我了解,FileOutputStream(DB_Path) 将其复制到命名路径。

public void copyDataBase(){
        try {
            InputStream myInput = mContext.getAssets().open(DB_Name);
            OutputStream myOutput = new FileOutputStream(DB_Path);

            byte[] buffer = new byte[1024];
            int length;
            while ((length=myInput.read(buffer))>0){
                myOutput.write(buffer,0,length);
            }
            myOutput.flush();
            myOutput.close();
            myInput.close();
        } catch (IOException e){
            Log.e("Error:","in CopyDatabase, where are in catch..");
            e.printStackTrace();
        }
    }

问题:

  • 我在哪里可以找到我的数据库?
  • 我如何更新它?
  • 新问题: 如何删除复制的数据库并从资产文件夹续订它?

1 个答案:

答案 0 :(得分:0)

如果您的数据库位于资产文件夹中,则它根本不在文件系统中,也就不在资产中,而是它在APK文件中的一部分(因此是只读的)。如果需要以读写方式将其复制,则需要先将其复制到文件系统,然后可以将其放置在所需的位置(尽管在数据库路径中是传统的做法,但不强制执行)。