2014-01-16 6 views
9

Таблица содержит 4 столбца: rowID, word, defintition, group_idSQLite update query Android

Я хочу изменить слово и определение определенной строки. Так вот мой код (слово это объект, где хранится слово, определение, идентификатор и 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 вместо = operator.

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.

here и here являются деталями

+1

я попробовал тот же запрос с db.exec(). Так в чем разница между этими двумя методами? – user3199577

+0

@ user3199577 'execSQL (String sql)' и 'execSQL (String sql, Object [] bindArgs)' both method не возвращает никаких данных, но 'rawQuery (String sql, String [] selectionArgs)' возвращает данные в 'Cursor' объект –

+0

@ user3199577 Сообщите мне, если в вышеприведенном запросе есть проблемы. –

1

@Digvesh имеет право идеи, но из-за this limitation, преобразование Int в строку для использования в качестве выбор arg не будет работать должным образом. Вместо этого:

// 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 work.

выход запроса

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;