当创建sqlite数据库的备份在android pie中创建旧文件时?
我有用于备份创建本地sqlite文件的代码。API低于28时工作正常,但高于>=28时创建备份文件是一个创建问题。当我创建备份文件时,它是创建旧数据文件,而不是更新的数据,而是在应用程序中显示更新的数据当创建sqlite数据库的备份在android pie中创建旧文件时?,android,sqlite,android-studio,android-sqlite,Android,Sqlite,Android Studio,Android Sqlite,我有用于备份创建本地sqlite文件的代码。API低于28时工作正常,但高于>=28时创建备份文件是一个创建问题。当我创建备份文件时,它是创建旧数据文件,而不是更新的数据,而是在应用程序中显示更新的数据 public void writeBackupOnSD() { try { File newFolder = new File(Environment.getExternalStorageDirectory(), "Account_Manager"); i
public void writeBackupOnSD() {
try {
File newFolder = new File(Environment.getExternalStorageDirectory(), "Account_Manager");
if (!newFolder.exists()) {
boolean isCreated = newFolder.mkdir();
Log.d("File", "status" + isCreated);
}
File file = new File(newFolder, backupFileName);//custom file name save on sd
String outFileName = file.getPath();
String inputFileName = getApplicationContext().getFilesDir().getPath()+ "/" + AppConstant.DATABASE_NAME;
if(checkDatabase(inputFileName)) {
FileInputStream myInput = new FileInputStream(new File(inputFileName));
FileOutputStream myOutput = new FileOutputStream(outFileName);
FileChannel src = myInput.getChannel();
FileChannel dst = myOutput.getChannel();
dst.transferFrom(src, 0, src.size());
src.close();
dst.close();
showMessage("Backup successfully!");
}
} catch (Exception e) {
e.printStackTrace();
showMessage("Failed to backup!");
}
}
使用Android Pie及以上版本,默认日志记录模式已从日志记录模式更改为WAL(预写日志记录)。 在日志模式下,事务被提交并写入磁盘上的db文件,并在日志中保留它们的记录,从而允许回滚事务 使用WAL时,事务被写入一个单独的文件(db文件后缀为-WAL),WAL文件只是偶尔被写入磁盘(检查点),但可以作为数据库文件的一部分使用。不需要回滚,因为基本上可以删除–wal文件 如果您没有检查数据库(关闭数据库应该检查它),并且您没有备份(和恢复)未检查的数据库以及–wal文件(以及–shm文件),那么您将丢失事务,并且在尝试打开数据库时基本上可能会出现问题。SQLitedatabase open方法然后尝试提供一个可用的数据库,该数据库为空 有多种修复方法:- 使用强制使用日记模式(不建议使用,因为您将失去提供的优势) 备份和恢复-wal和-shm文件以及数据库文件 在备份数据库之前完全检查数据库,因此不需要备份-wal和-shm文件。 -注意:关闭数据库应完全检查数据库。
-这里的答案显示了如何通过编程检查点您不能任意复制一个打开的、正在使用的sqlite数据库文件,而不会有数据丢失甚至损坏的风险。不幸的是,Android没有导出应该用于以编程方式进行备份的官方备份api对该文件的所有操作和备份只需复制该文件,但仍显示最新的内容,但在复制该文件时,请使用旧数据复制该文件。最好的方法是先正常关闭与数据库文件的所有连接。如果您不能这样做,请提及其他一些选项。谢谢,
disablewriteaheadloging()
是我所需要的。