【问题标题】:Android sqlite flush WAL file contents into main database fileAndroid sqlite 将 WAL 文件内容刷新到主数据库文件中
【发布时间】:2015-05-16 14:20:33
【问题描述】:

我正在尝试创建我的应用程序数据库内容的备份,并且对于大多数设备来说它工作正常,但有些设备默认启用了 wal 模式,这会导致问题。从我读过的所有内容中,调用“pragma wal_checkpoint”应该将 -wal 文件的内容刷新到我所追求的主数据库文件中。将内容刷新到主 db 文件,然后复制 db 文件进行备份。我在打电话

db.rawQuery("pragma wal_checkpoint;", null);

但它似乎不起作用。有什么想法吗?

【问题讨论】:

  • 执行pragma wal_checkpoint; 将返回一行三列。您可以检查这些列值以确定调用的确切结果。例如,来自文档第三列是在检查点结束时已成功移回数据库文件的预写日志文件中的页数。
  • 通过 sql 命令提示符运行命令按预期工作,但来自我的应用程序内部的命令没有。

标签: java android sqlite


【解决方案1】:

rawQuery() 返回一个游标;在您尝试从光标读取之前,查询不会真正执行。

要执行不返回游标的 SQL 语句,请改用 execSQL()

【讨论】:

    【解决方案2】:

    我可以将 wal 文件刷新到主数据库。

            String query = "pragma wal_checkpoint(full)";
     
            Cursor cursor = db.rawQuery(query, null);
            if (cursor != null && cursor.moveToFirst()) {
                int a = cursor.getInt(0);
                int b = cursor.getInt(1);
                int c = cursor.getInt(2);
    
            }
            if (cursor != null) {
                cursor.close();
            }
            db.close();
    

    【讨论】:

      猜你喜欢
      • 2013-11-03
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-03
      • 2015-09-30
      • 1970-01-01
      • 2014-03-18
      • 1970-01-01
      相关资源
      最近更新 更多