0

我正在尝试使用 SQLite 数据库来保存来自消息传递应用程序的日志信息。

我正在使用 SQLiteOpenHelper 并使用以下命令将数据库强制到无根设备的 SD 卡

public LogDatabase(Context context, String dbname) {
  super(context, 
    Environment.getExternalStorageDirectory().getAbsolutePath() + 
      "/" + dbname, null, 3);
}

这似乎工作正常:数据库适当增长,应用程序在写入时不会抛出任何异常。

当我通过 USB 安装设备并尝试从外部应用程序(例如,来自 Ubuntu 命令行的 sqlite3)打开数据库时,就会出现问题。错误始终相同:“错误:文件已加密或不是数据库”。

Android 对 SQLite 的处理有什么奇怪的吗?还是我在管理数据库的方式上遗漏了一些根本性的问题?

编辑:有问题的原始设备是运行 v2.3.5 的 HTC Desire S。

编辑:我已经在替代设备(运行 v2.3.4 的摩托罗拉 ET1)上重新运行测试,但问题没有发生。我可以通过 Ubuntu 挂载设备,通过 sqlite3 命令行随意浏览数据库。

4

1 回答 1

0

好吧,我似乎找到了答案。一旦我怀疑它可能是特定于供应商的,我就发现了这个堆栈问题:

HTC Desire HD 的 Sqlite 问题

这表明 HTC 可能在其设备上启用了预写日志记录 (WAL)。

假设这是真的,我提取了一个最新版本的 SQLite 并构建了 v3.7.14,它可以成功地打开问题数据库。这与 SQLite 的 v3.6.22 相反,后者不能。

于 2012-08-15T14:24:08.107 回答