2013-05-15 94 views
0

我目前正在開發一個帶eclipse的android應用程序。更新數據庫時出現問題。問題是在調用updateFlag方法時應用程序崩潰。 updateFlag方法僅基於rowId更新一個特定列。更新數據庫時應用程序崩潰

這是SQLiteAdapter類我的數據庫結構:

public long insert(String answer, String question, String hint, String flag, String level){ 

    ContentValues contentValues = new ContentValues(); 
    contentValues.put(KEY_ANSWER, answer); 
    contentValues.put(KEY_QUESTION, question); 
    contentValues.put(KEY_HINT, hint); 
    contentValues.put(KEY_FLAG, flag); 
    contentValues.put(KEY_LEVEL, level); 
    return sqLiteDatabase.insert(MYDATABASE_TABLE, null, contentValues); 
} 

這是SQLiteAdapter類的更新方法:

public void updateFlag(long rowId) 
    { 
     ContentValues args = new ContentValues(); 
     args.put(KEY_FLAG, "1"); 
     sqLiteDatabase.update(MYDATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null); 
    } 

這是我如何調用updateFlag方法在另一類:

 mySQLiteAdapterListener2 = new SQLiteAdapter(this); 
     mySQLiteAdapterListener2.openToWrite(); 
     long idListener = Long.parseLong(getId); 
     mySQLiteAdapterListener2.updateFlag(idListener); 
     mySQLiteAdapterListener2.close(); 

我的代碼有什麼問題?任何人都知道如何以正確的方式更新基於rowId的特定列?

+3

你會得到什麼異常/ stacktrack? – Nick

+0

當你的應用程序崩潰時,你應該總是使用logcat –

+0

logcat不會顯示任何錯誤 –

回答

1

試試這個:

sqLiteDatabase.update(MYDATABASE_TABLE, args, KEY_ROWID + "=?", new String[] {rowId}); 

最後一個參數,如果傳遞的值將取代「?」。

這假定您的更新有問題。您需要發佈堆棧跟蹤,以便我們可以看到應用程序崩潰的位置。

2

SQLiteDatabase更新方法有四個參數:

database.update(String table_name, ContentValues values, String selection, String[] selectionArgs); 

所以,您的查詢應該像你下面updateFlag方法。用這個替換你的updateFlag方法,並試試這個。

public void updateFlag(long rowId) 
    { 
     ContentValues args = new ContentValues(); 
     args.put(KEY_FLAG, "1"); 
     sqLiteDatabase.update(MYDATABASE_TABLE, args, KEY_ROWID + "=?", new String[]{rowId+""}); 
    } 
+0

該文件實際上指出,你可以給null作爲最後兩個參數.http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#update( java.lang.String,android.content.ContentValues,java.lang.String,java.lang.String [])) – DigCamara

+0

@DigCamara是當然。在那種情況下,所有的行都會受到影響。再次檢查文檔。在當前場景中,如果在最後兩個參數中傳遞了NULL,NULL,那麼所有行都會更新爲列「KEY_FLAG」中的值「1」。 –

相關問題