主要大小文件数据库SQLite不会更新,但-wal文件会更新

问题描述 投票:0回答:1

我在导出 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;
    }

我正在下载主文件数据库,但该文件没有添加最后一行

java android database sqlite
1个回答
0
投票

如果您不想失去 SQLite 的预写日志记录的好处,而不是禁用它,您需要做的就是确保执行检查点以将数据从 wal 文件移动到主数据库文件。

执行此操作的最简单方法是使用类似

db.close();

的内容关闭与数据库的所有连接

一旦没有与数据库的活动连接,将执行检查点,并且主数据库文件将使用最后读取的导出行进行更新。

抱歉,我不能更具体,但您没有显示足够的代码来建议应该在哪里关闭数据库。

© www.soinside.com 2019 - 2024. All rights reserved.