2012-01-08 3 views
1

Пробовал все. Это ОБНОВЛЕНИЕ не работает. Нет ошибки или что-то - она ​​просто не обновляет таблицу.sqlite3 rawquery update не работает

void SetDisable (Integer ID, boolean action){ 
     Integer s; 
     if (action==true) s = 0; else s = 1; 
     db.rawQuery("UPDATE sms SET disabled="+s+" WHERE id="+ID+"",null); 
    } 

Это моя схема таблицы:

CREATE TABLE sms (id INTEGER PRIMARY KEY, fromhour INT, frommin INT, tohour INT, tomin INT, disabled INT); 
sqlite> 

ответ

5

Прост в использовании метод обновления, предоставляемый классом SQLiteDatabase.

void SetDisable (Integer ID, boolean action){ 
    Integer s; 
    if (action==true) s = 0; else s = 1; 

    ContentValues cv=new ContentValues(); 
    cv.put(disabled, s); 

    String where = "id=?"; 
    String[] whereArgs = {Integer.toString(ID)}; 

    db.update(sms, cv, where , whereArgs); 
} 
+0

Да, это простой в использовании метод обновления для SQLiteDataBase, но если вы хотите обновить всю запись. Если вы хотите обновить только одну или несколько паролей, лучший способ - использовать простой метод execSQL. Если вы попытаетесь обновить одно поле с помощью rawQuery, оно не будет обновляться, поэтому просто используйте execSQL(). – Sniper

11

Попробуйте это:

db.execSQL("UPDATE sms SET disabled="+s+" WHERE id="+ID+""); 

SQL запросов, которые возвращают таблицу (курсор) должны выполняться с rawQuery, и те, которые не возвращают таблицы, должны выполняться с помощью execSQL

Смотрите это:

Increase the value of a record in android/sqlite database

+0

получил ошибку «пустую привязки арг» – Dikobraz

+0

Вы можете использовать новый Object [] {} (пустой массив объектов) в качестве связывания аргументов, если у вас нет ничего, чтобы заменить в запросе. Не уверен, что это полностью решит проблему. Существует другая форма execSQL, которая принимает аргументы, если вам это нужно. – parkerfath

+0

Лучшее решение, спасибо! – catalin87

-1

Обновлено:

Попробуйте

ContentValues cv = new ContentValues(); 
cv.put("disabled", s); 

db.update("table_name", cv, "id="+ID, null); 

ПРИМЕЧАНИЕ: Я не знаю, если это достаточно, чтобы поставить только то, что вам нужно изменить в cv или вы должны положить все атрибуты.

+0

@StErMi: Мой плохой. Я прочитал его, «должно быть, прекращено». Должен ли я удалить это? – iTurki

+0

Не работает. Получено предупреждение: «Найдена строка SQL, которая заканчивается»; – Dikobraz

+0

iturki да, может быть, это лучше :) @Dikobraz, как я уже сказал (и, как говорится в документации), вы не должны положить точку с запятой в конце запроса – StErMi

Смежные вопросы