6

我收到以下错误:

android.database.sqlite.SQLiteDiskIOException: error code 10: disk I/O error
    at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
    at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:92)
    at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1926)
    at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1866)

我只在三星 Nexus 手机上的 ICS 4.0.1 上收到此错误。在模拟器、摩托罗拉 Xoom 3.2 和 HTC Desire 2.3.3 上,代码运行良好。我的代码针对的是 SDK 版本 8 或 2.2.x。执行execSQL如下:

db.execSQL("DROP TABLE IF EXISTS " + table.getTableName());

数据库存储在内部,而不是存储在 SD 卡上。关于如何解决这个问题的任何建议?

4

2 回答 2

6

解决了这个问题。

问题是在 drop table 语句之前有一个Context.deleteDatabase('dbName')语句显然删除了 db,然后报告的 I/O 错误非常有意义。

似乎以前(不必要地)使用了腰带和大括号的方法。

然而有趣的是,这在转向 ICS 之前并未成为问题。

于 2011-12-15T14:27:57.213 回答
0

当加密的数据库无法使用 ForeignKey/Index 正确删除表时,我遇到了同样的问题。在删除表之前删除现有记录已解决问题:

fun SupportSQLiteDatabase.dropTable(name: String) {
    execSQL("DELETE FROM $name")
    execSQL("DROP TABLE IF EXISTS $name")
}
于 2021-12-07T11:40:32.403 回答