设备上的SQLiteDiskIOException但不在PC上 - eclipse

时间:2011-07-06 04:45:38

标签: android sqlite

Hello android开发者,

我很难完成这项工作,但失败了,现在想对这个错误提出建议。问题是我使用'SQLiteDabase'库中的'update'方法,并且 NOT ONLY 在实际设备上工作。

奇怪的是它在eclipse android模拟器上没有问题,但只在实际设备上。如果有人知道如何解决这个问题或有建议,你能帮帮我吗?非常感谢您对此问题的任何帮助。下面的代码是我的方法和错误消息。


public void updateDBMessages(int column_no, String key, Object value){
        SQLiteDatabase db = getWritableDatabase();
        ContentValues table_value = new ContentValues();

        if(value.getClass().equals(String.class)){
            table_value.put(key, value.toString());
        }
        else if (value.getClass().equals(Integer.class)){
            table_value.put(key, (Integer)value);
        }

        // THE ERROR HAPPENS ON THIS COMMAND!!
        db.update(VM_TABLE_NAME, table_value, "_id="+column_no, null);      
    }

[错误信息日志]

07-05 08:10:39.721: ERROR/AndroidRuntime(10295): FATAL EXCEPTION: main
07-05 08:10:39.721: ERROR/AndroidRuntime(10295): android.database.sqlite.SQLiteDiskIOException: error code 10: disk I/O error
07-05 08:10:39.721: ERROR/AndroidRuntime(10295):     at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
07-05 08:10:39.721: ERROR/AndroidRuntime(10295):     at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:61)
07-05 08:10:39.721: ERROR/AndroidRuntime(10295):     at android.database.sqlite.SQLiteDatabase.updateWithOnConflict(SQLiteDatabase.java:1727)
07-05 08:10:39.721: ERROR/AndroidRuntime(10295):     at android.database.sqlite.SQLiteDatabase.update(SQLiteDatabase.java:1656)
07-05 08:10:39.721: ERROR/AndroidRuntime(10295):     at ca.slipline.android.asterdroid.VoiceMailScreen.updateDBMessages(VoiceMailScreen.java:607)
07-05 08:10:39.721: ERROR/AndroidRuntime(10295):     at ca.slipline.android.asterdroid.VoiceMailScreen.access$9(VoiceMailScreen.java:594)
07-05 08:10:39.721: ERROR/AndroidRuntime(10295):     at ca.slipline.android.asterdroid.VoiceMailScreen$3.onClick(VoiceMailScreen.java:482)
07-05 08:10:39.721: ERROR/AndroidRuntime(10295):     at android.view.View.performClick(View.java:2501)

2 个答案:

答案 0 :(得分:0)

您似乎正在尝试更新记录with conflict。您应该修改update语句(检查where子句或字段类型等)或只使用updateWithOnConflict

答案 1 :(得分:0)

我找到了解决方案。这是一种Android本身的问题所以我只是将'update'方法更改为'execSQL',以便使用SQL命令'UPDATE'手动更新它。