【问题标题】:How to disable Android SQLite Journal file?如何禁用 Android SQLite 日志文件?
【发布时间】:2012-04-20 06:07:27
【问题描述】:

我正在使用事务将多行插入表中。但是,我仍然看到在 SD 卡上创建了临时 sqlite-journal 文件以及 sqlite 表。

如何禁用日志文件的创建?

谢谢

【问题讨论】:

  • 日志文件是由 sqlite db 在您使用事务时创建的,以确保如果由于某种原因事务被外部手段中断,db 不会被损坏。如果我是你,我会不理会它。
  • @Mr.Will 那么,为什么在 Android 上,当没有任何东西触及数据库时,日志会被保留,而这不是其他系统上的默认行为?

标签: android sqlite journal


【解决方案1】:

日志是运行事务时使用的内部 SQLite 文件(以确保回滚)。你不能禁用它,你也不想这样做。

【讨论】:

  • 其实你可以用PRAGMA journal_mode=OFF禁用它:-)
  • 我尝试了以下方法:Cursor c1=db.rawQuery("PRAGMA journal_mode=OFF",null); c1.close()。似乎没有效果。我仍然看到正在创建日志文件
  • 是的,正如我在回答中提到的那样,编译指示不会持续存在,因此每次打开数据库时都需要运行它。
【解决方案2】:

您可以选择将日志保存在内存中,这样就不会创建 -journal 文件:

pragma journal_mode=memory;

请注意,每次打开数据库时都需要运行它。

我建议您阅读以下内容以更好地了解正在发生的事情:

http://www.sqlite.org/pragma.html#pragma_journal_mode

【讨论】:

【解决方案3】:

您可以使用以下代码删除日志文件

@Override
public void onOpen(SQLiteDatabase db) {         
    Cursor cc = db.rawQuery("PRAGMA journal_mode=DELETE",null);
    Log.i(TAG,"--- cursor count " + cc.getCount());     
    super.onOpen(db);        
}

您需要使用光标。游标是一个接口,提供对数据库查询返回的结果集的随机读写访问。 如果使用光标,日志文件将被删除。

【讨论】:

    【解决方案4】:

    请注意,PRAGMA journal_mode=OFFPRAGMA journal_mode=memory 的声明对每个交易基础都有效。您需要为每笔交易设置它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多