通常要在数据库中进行更改,我遵循以下步骤:
这对我来说已经很多次了。不,我的问题是我的项目不再以某种方式访问此数据库。
我发现这是通过从资产文件夹中删除数据库并重新安装该应用程序来解决的。该应用程序仍然可以运行,因此,据我所知,它无法从我之前使用的资产文件夹中访问数据库。
我正在使用以下路径访问它:
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();
}
}
问题:
答案 0 :(得分:0)
如果您的数据库位于资产文件夹中,则它根本不在文件系统中,也就不在资产中,而是它在APK文件中的一部分(因此是只读的)。如果需要以读写方式将其复制,则需要先将其复制到文件系统,然后可以将其放置在所需的位置(尽管在数据库路径中是传统的做法,但不强制执行)。