【问题标题】:Android Sqlite SQLiteDiskIOException: disk I/O error (code 1290) SQLITE_IOERR_DIR_FSYNCAndroid Sqlite SQLiteDiskIOException:磁盘 I/O 错误(代码 1290)SQLITE_IOERR_DIR_FSYNC
【发布时间】:2013-03-18 07:41:04
【问题描述】:

我有很多客户遇到标题中提到的异常,但我无法在我的任何设备上重现它。

错误报告似乎表明该错误仅发生在 Sony 设备上,但我似乎找不到任何关于 Sony 在 Android 上使用他们的数据库做任何有趣事情的报告。

触发此异常的代码正在结束一个事务

db.beginTransaction();
for(some iterator)
    db.execSQL("UPDATE table SET column = " + value + " WHERE other_column = " + something);
db.setTransactionSuccessful();
db.endTransaction();

这里的堆栈跟踪是:

android.database.sqlite.SQLiteDiskIOException: disk I/O error (code 1290)
at android.database.sqlite.SQLiteConnection.nativeExecute(Native Method)
at android.database.sqlite.SQLiteConnection.execute(SQLiteConnection.java:559)
at android.database.sqlite.SQLiteSession.endTransactionUnchecked(SQLiteSession.java:437)
at android.database.sqlite.SQLiteSession.endTransaction(SQLiteSession.java:401)
at android.database.sqlite.SQLiteDatabase.endTransaction(SQLiteDatabase.java:530)

数据库驻留在外部存储上(但根据客户报告,它发生在外部存储安装时):

SQLiteDatabase db = SQLiteDatabase.openDatabase("/path/to/sqlite", null, SQLiteDatabase.NO_LOCALIZED_COLLATORS);

请不要对代码太苛刻,我知道(例如)应该有一个 try/catch 围绕在 endTransaction 的 sql 语句中,但在这种情况下没有任何区别(我目前没有资源来清理这个遗留问题)。

我在 AIX 上发现了一些关于 SQLITE_IOERR_DIR_FSYNC 的旧报告,其中不支持目录上的 fsync(),但这并没有真正帮助我,因为我显然无法在 Android 上使用正确的编译器标志重新编译 SQLite...

有什么想法吗?

【问题讨论】:

  • 您是否尝试在客户报告该错误的同一台索尼设备上重现该错误?
  • 不,很遗憾,我无法使用任何 Sony 设备,而且我无法在我可以测试的任何设备上重现它(Samsung Galaxy 1&2、Nexus S、Nexus 4、几个三星平板电脑和 7 英寸 Kindle Fire HD);事实上,这个错误对我来说并没有发生过一次......
  • 好的,如果您将您的 APK 转发给我,我可以使用 SE 设备,我可以试试...?
  • 非常感谢,我构建了一个带有额外详细日志记录的 apk,我该如何发送给您?所以没有私人消息,对吧?如果没有其他问题,您可以通过 gmail 的 与我联系。再次感谢!
  • mystackoverflowPontomedon 是这样吗?

标签: android sqlite sony fsync


【解决方案1】:
【解决方案2】:

这是 Sony 的 sqlite 版本中的一个错误,我向他们报告了它并得到了他们修复它的通知。不幸的是,该错误仍然存​​在 - 但我可以放心地忽略,事务实际上已成功完成(sqlite 的最后一次调用之一 - 包含数据库的目录上的 fsync - 失败,但似乎没有无论如何都是必要的)。

【讨论】:

    猜你喜欢
    • 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
    相关资源
    最近更新 更多