我在导出 SQLite 数据库时遇到问题。 我正在读取主文件数据库(database.db),但是当我导出它时,数据总是等于之前的文件。
奇怪的是,database-wal 文件总是在更新其文件大小,我在本地数据库中添加新行。所以,我不知道应该做什么,导出最后添加的行。
这是我的导出代码:
protected Boolean exportarBD(Context context, Activity activity) throws IOException {
Boolean exported = false;
if (!Permisos.validarWriteExternalStorage(context, activity)){
return exported;
}
File backupDir = new File(context.getExternalFilesDir(null), "mydatabase/backup");
if (!backupDir.exists()) {
backupDir.mkdirs(); // Crea los directorios si no existen
}
// Define el nombre del archivo exportado
File exportFile = new File(backupDir, "DB_exported" + (new Date()).toString() + ".db");
File dbFile = new File(context.getApplicationContext().getDatabasePath("database.db").getAbsolutePath());
if (dbFile.exists()) {
// Usa un flujo para copiar la base de datos al nuevo archivo
FileInputStream fis = new FileInputStream(dbFile);
FileOutputStream fos = new FileOutputStream(exportFile);
byte[] buffer = new byte[1024];
int length;
while ((length = fis.read(buffer)) > 0) {
fos.write(buffer, 0, length);
}
fos.flush();
fos.close();
fis.close();
exported = true;
} else {
exported = false;
}
return exported;
}
我正在下载主文件数据库,但该文件没有添加最后一行
如果您不想失去 SQLite 的预写日志记录的好处,而不是禁用它,您需要做的就是确保执行检查点以将数据从 wal 文件移动到主数据库文件。
执行此操作的最简单方法是使用类似
db.close();
的内容关闭与数据库的所有连接
一旦没有与数据库的活动连接,将执行检查点,并且主数据库文件将使用最后读取的导出行进行更新。
抱歉,我不能更具体,但您没有显示足够的代码来建议应该在哪里关闭数据库。