安卓 SQLite SQLiteDiskIOException : disk I/O error (code 1290) SQLITE_IOERR_DIR_FSYNC

标签 android sqlite sony fsync

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

错误报告似乎表明该错误仅发生在索尼设备上,但我似乎找不到任何关于索尼在 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 在 finally 中的 sql 语句,但在这种情况下它没有什么区别(我目前没有资源来清理这个遗留的困惑)。

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

有什么想法吗?

最佳答案

关于安卓 SQLite SQLiteDiskIOException : disk I/O error (code 1290) SQLITE_IOERR_DIR_FSYNC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15471851/

相关文章:

java - 如何更改 Sqlite 数据库中特定数据的 Listview 中的行颜色

sql - SQLite-每组第一个-组合顺序和反对排序顺序

camera - QX1,通过 API 的手动拍摄模式 (M)

nfc - Sony SmartWatch 2 是否有 NFC API?

android - Linux 上的图像到 MPEG 工作,Android 上的相同代码 = 绿色视频

android - 从命令行构建发布apk所需的最小android sdk文件数量

android - 如何在 Fragment 中设置 BottomNavigationView

android - 在 ActionbarSherlock 中更改 homeAsUpIndicator 图标在 ICS 中没有影响?

java.lang.IllegalArgumentException : Empty values

camera - 通过 Sony Remote Camera API 连接到多台摄像机