SQL 数据库文件重写时崩溃 android
SQL crash on database file rewrite android
我正在尝试将我的应用程序中生成的数据库文件备份到 .zip
文件,然后将它们解压缩以恢复到 /data/data/<packagename>/databases/
文件夹。我只压缩数据库文件而不压缩 -journal files
。当我单击恢复选项时,.db
文件被解压缩并移动到 /databases/
文件夹。这里的问题是我在移动文件时遇到崩溃。以下是错误日志:
E/UncaughtException: android.database.sqlite.SQLiteReadOnlyDatabaseException: attempt to write a readonly database (code 1032)
#################################################################
Error Code : 1032 (SQLITE_READONLY_DBMOVED)
Caused By : Database or Journal file have been removed.
(attempt to write a readonly database (code 1032))
#################################################################
at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
解压后移动文件的功能:
public void moveContents(){
File destinationFolder = new File(DATABASE_FOLDER_PATH);
File sourceFolder = new File(Environment.getExternalStorageDirectory() + "/AppName/Backups/_extracts");
if (!destinationFolder.exists())
{
destinationFolder.mkdirs();
}
// Check weather source exists and it is folder.
if (sourceFolder.exists() && sourceFolder.isDirectory())
{
// Get list of the files and iterate over them
File[] listOfFiles = sourceFolder.listFiles();
if (listOfFiles != null)
{
for (File child : listOfFiles )
{
try {
File checkFile=new File(destinationFolder+"/"+child.getName());
if(checkFile.exists()){
checkFile.delete();
FileUtils.moveFileToDirectory(child,destinationFolder,false);
}else{
FileUtils.moveFileToDirectory(child,destinationFolder,false);
}
} catch (IOException e) {
Log.e("FLERROR","ERROR",e);
}
// Move files to destination folder
}
// Add if you want to delete the source folder
sourceFolder.delete();
}
}
else
{
System.out.println(sourceFolder + " Folder does not exists");
}
}
应用程序崩溃并关闭。
请帮忙。提前致谢。
根据您的错误日志,您似乎正在尝试移动只读的数据库。您将必须获得数据库的可写许可。
所以在移动您的数据库之前。使用它使其可写。
String yourpath = DB_PATH + DATABASE_NAME;
SQLiteDatabase yourdb = SQLiteDatabase.openDatabase(yourpath, null, SQLiteDatabase.OPEN_READWRITE);
我正在尝试将我的应用程序中生成的数据库文件备份到 .zip
文件,然后将它们解压缩以恢复到 /data/data/<packagename>/databases/
文件夹。我只压缩数据库文件而不压缩 -journal files
。当我单击恢复选项时,.db
文件被解压缩并移动到 /databases/
文件夹。这里的问题是我在移动文件时遇到崩溃。以下是错误日志:
E/UncaughtException: android.database.sqlite.SQLiteReadOnlyDatabaseException: attempt to write a readonly database (code 1032)
#################################################################
Error Code : 1032 (SQLITE_READONLY_DBMOVED)
Caused By : Database or Journal file have been removed.
(attempt to write a readonly database (code 1032))
#################################################################
at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
解压后移动文件的功能:
public void moveContents(){
File destinationFolder = new File(DATABASE_FOLDER_PATH);
File sourceFolder = new File(Environment.getExternalStorageDirectory() + "/AppName/Backups/_extracts");
if (!destinationFolder.exists())
{
destinationFolder.mkdirs();
}
// Check weather source exists and it is folder.
if (sourceFolder.exists() && sourceFolder.isDirectory())
{
// Get list of the files and iterate over them
File[] listOfFiles = sourceFolder.listFiles();
if (listOfFiles != null)
{
for (File child : listOfFiles )
{
try {
File checkFile=new File(destinationFolder+"/"+child.getName());
if(checkFile.exists()){
checkFile.delete();
FileUtils.moveFileToDirectory(child,destinationFolder,false);
}else{
FileUtils.moveFileToDirectory(child,destinationFolder,false);
}
} catch (IOException e) {
Log.e("FLERROR","ERROR",e);
}
// Move files to destination folder
}
// Add if you want to delete the source folder
sourceFolder.delete();
}
}
else
{
System.out.println(sourceFolder + " Folder does not exists");
}
}
应用程序崩溃并关闭。
请帮忙。提前致谢。
根据您的错误日志,您似乎正在尝试移动只读的数据库。您将必须获得数据库的可写许可。
所以在移动您的数据库之前。使用它使其可写。
String yourpath = DB_PATH + DATABASE_NAME;
SQLiteDatabase yourdb = SQLiteDatabase.openDatabase(yourpath, null, SQLiteDatabase.OPEN_READWRITE);