2014-01-16 107 views
9

該表包含4列:rowID,word,defintition,group_idSQLite更新查詢Android

我想更改某個行的單詞和定義。因此,這裏是我的代碼(字就是兩個字,定義,ID和GROUP_ID存儲的對象)

ContentValues values = new ContentValues(); 
values.put(KEY_WORD, word.getWord()); 
    values.put(KEY_DEFINITION, word.getDefinition()); 
    db.update(TABLE_WORDS, values, KEY_ID, new String [] {String.valueOf(word.getID())}); 

誰能告訴我,爲什麼只創建一個新的生產線,而不是更改給定ID下的行?

回答

9
SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_NAME, contact.getName()); 
     values.put(KEY_DATE, contact.getDate()); 

     // updating row 
     return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?", 
       new String[] { String.valueOf(contact.getID()) }); 
+0

這也沒工作 – user3199577

0

使用LIKE而不是=運算符。

SQLiteDatabase db = this.getWritableDatabase(); 

     ContentValues values = new ContentValues(); 
     values.put(KEY_NAME, contact.getName()); 
     values.put(KEY_DATE, contact.getDate()); 

     // updating row 
     return db.update(TABLE_CONTACTS, values, KEY_ID + " LIKE ?", 
       new String[] { String.valueOf(contact.getID()) }); 
-2

你可以試試這個使用db.rawQuery,即

db.rawQuery("UPDATE "+ TABLE_WORDS + " SET "+ KEY_WORD + " = '"+word.getWord()+"' ,"+KEY_DEFINITION+"= '"+word.getDefinition()+ "' WHERE " + KEY_ID + " = "+word.getID(), null); 

在這裏,你不需要建立任何ContentValues

herehere是細節

+1

我嘗試了同樣的查詢與db.exec()。那麼這兩種方法有什麼區別? – user3199577

+0

@ user3199577'execSQL(String sql)'和'execSQL(String sql,Object [] bindArgs)'這兩個方法不返回任何數據,但'rawQuery(String sql,String [] selectionArgs)'將數據返回到'Cursor'對象 –

+0

@ user3199577讓我知道在上面的查詢中是否有任何問題。 –

1

@Digvesh看法是正確的,但由於this limitation,一個int轉換爲字符串的使用選擇參數將無法正常工作。相反,這樣做:

// assume: SQLiteDatabase db = this.getWritableDatabase(); 

ContentValues values = new ContentValues(); 
values.put(KEY_WORD, word.getWord()); 
values.put(KEY_DEFINITION, word.getDefinition()); 
int rowsUpdated = db.update(TABLE_WORDS, values, KEY_ID + "=" + word.getID(), null); 
3
String id = "1"; 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(COLUMN_NOTIFICATION_STATUS,"canceled"); 
    db.update(TABLE_NOTIFICATION, values,COLUMN_NOTIFICATION_ID + " = ? ",new String[]{ String.valueOf(id) }); 

它會工作作爲事先準備好的聲明。 這段代碼在我的情況下工作..謝謝

1

這工作對我來說,而db.rawquery didnot工作。

輸出查詢

String qu="UPDATE "+ DATABASE_TABLE_DATA + " SET "+isbookmark+" = "+status+" WHERE id = "+uid+";"; 
 
db.execSQL(qu); 
 

 
output query : 
 
UPDATE tabel_data SET `isbookmark` = 1 WHERE id = 2720271;