4

我使用 ACRA 进行错误报告,在过去的 30 天里,我收到了 6 个(我有 10 个成千上万的用户)与此类似的崩溃报告:

android.database.sqlite.SQLiteDiskIOException: disk I/O error (code 778)
at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:931)
at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1469)
at android.database.sqlite.SQLiteDatabase.replaceOrThrow(SQLiteDatabase.java:1411)
 :

这些发生在我的应用程序的各个部分。所有设备都是运行 Android 4.1.2 的三星设备。我怀疑是三星的错误,但我能做些什么来缓解这个问题?

4

5 回答 5

1

在读取之前没有错误写入的 4.1.2 的 sqlite 行后,我收到了 IllegalStateException。这只发生在某些列值上。大多数列值都可以正常工作。此外,我可以使用相同的数据库并在 Android 2.3 以及 PC 上的 sqlite 版本上正常阅读。此外,我在 4.1.2 设备上安装了一个 sqlite 浏览器 (aSQLiteManager),它在尝试读取该表时崩溃。我只能假设这是与 4.1.2 一起部署的 sqlite (3.7.11) 版本中的一个错误。我会将此报告给 sqlite 团队。

于 2013-04-05T04:57:32.563 回答
1

这可能与影响 Android 4.2.2 和 4.2.1的SQLite 错误有关。

您可以看到Android 修复已包含在 Android 版本 4.3 中,并且与 Android 上默认启用的 AUTO_VACUUM SQLite 选项相关。

您可以更改数据库的 AUTO_VACUUM 值,但要小心并在之前阅读AUTO_VACUUM 文档页面,以确保该解决方案符合您的需求。

于 2014-03-04T11:30:45.843 回答
0

我发现至少有一些测试(ExtensionWebstorePrivateApiTest.AppInstallBubble(例如)在 a 上成功dev image但在 a 上失败test image。即使通过sshfs mounted directory(不涉及自动测试)运行它们也是如此。我在屏幕上看到有关无效配置文件的错误,并且:

[10375:10375:0702/172634:2214463961:ERROR:nss_util.cc(88)] Failed to create /home/chronos/user/.pki/nssdb directory.
[10375:10375:0702/172634:2214497333:ERROR:nss_util.cc(588)] Error opening persistent database (configDir='sql:' tokenDescription='Real NSS database'): NSS error code: -8192
[10375:10406:0702/172634:2214908084:ERROR:diagnostic_error_delegate.h(31)] sqlite error 778, errno 0: disk I/O error
[10375:10406:0702/172634:2214908549:ERROR:diagnostic_error_delegate.h(31)] sqlite error 1, errno 0: no such table: meta
[10375:10384:0702/172634:2214913640:ERROR:diagnostic_error_delegate.h(31)] sqlite error 778, errno 0: disk I/O error
[10375:10384:0702/172634:2214913831:ERROR:diagnostic_error_delegate.h(31)] sqlite error 1, errno 0: no such table: meta
[10375:10406:0702/172634:2214913926:ERROR:diagnostic_error_delegate.h(31)] sqlite error 1, errno 0: SQL logic error or missing database
[10375:10384:0702/172634:2214914378:ERROR:diagnostic_error_delegate.h(31)] sqlite error 1, errno 0: no such table: meta
[10375:10384:0702/172634:2214914415:ERROR:keyword_table.cc(536)] Can't write default search id backup.
[10375:10384:0702/172634:2214914432:ERROR:keyword_table.cc(465)] Failed to update default search id backup.
[10375:10384:0702/172634:2214914475:ERROR:diagnostic_error_delegate.h(31)] sqlite error 1, errno 0: SQL logic error or missing database
[10375:10384:0702/172634:2214914497:ERROR:web_data_service.cc(657)] Cannot initialize the web database: 1
[10375:10375:0702/172635:2215119305:ERROR:object_proxy.cc(495)] Failed to call method: org.bluez.Manager.DefaultAdapter: object_path= /: org.bluez.Error.NoSuchAdapter: No such adapter
[10375:10384:0702/172639:2219896500:ERROR:diagnostic_error_delegate.h(31)] sqlite error 778, errno 0: disk I/O error
[10375:10384:0702/172639:2219896877:ERROR:diagnostic_error_delegate.h(31)] sqlite error 1, errno 0: no such table: meta
[10375:10384:0702/172639:2219896943:ERROR:diagnostic_error_delegate.h(31)] sqlite error 1, errno 0: SQL logic error or missing database
[10375:10384:0702/172639:2219898265:ERROR:diagnostic_error_delegate.h(31)] sqlite error 778, errno 0: disk I/O error
[10375:10384:0702/172639:2219898567:ERROR:diagnostic_error_delegate.h(31)] sqlite error 1, errno 0: no such table: meta
[10375:10384:0702/172639:2219898658:ERROR:diagnostic_error_delegate.h(31)] sqlite error 1, errno 0: SQL logic error or missing database
[0702/172716:ERROR:test_launcher.cc(386)] Test timeout (45000 ms) exceeded for ExtensionWebstorePrivateApiTest.AppInstallBubble

BUGFIX:SQLITE 4.4.1已修复由 指示的错误error code 778,该错误由 引起disk reading fault,实际上可以由db engine自身在内部恢复。

于 2013-03-20T09:06:25.367 回答
0

我有同样的问题,它是由文件描述符打开限制引起的。广泛使用打开的文件、套接字或游标可以达到此限制。此外,如果您从这些资源之一中泄漏,则在连续使用一段时间后,您的应用程序中可能会发生此错误。

于 2013-10-25T19:12:10.430 回答
-1

可以参考Sqlite 官方文档。好像是硬件异常,如果不能复现,或许我们可以尝试忽略这个问题?

(778) SQLITE_IOERR_WRITE

SQLITE_IOERR_WRITE 错误代码是 SQLITE_IOERR 的扩展错误代码,表示尝试写入磁盘上的文件时 VFS 层中的 I/O 错误。此错误可能是由于硬件故障或文件系统在文件打开时卸载造成的。如果文件系统已满,则不应发生此错误,因为为此目的有一个单独的错误代码 (SQLITE_FULL)。

于 2021-05-26T12:14:56.820 回答