2014-01-07 3 views
2

Я пытаюсь обновить два поля в базе данных SqLite, но его не работает, в LogCat нет исключения, но я не могу получить какое-либо значение для этих двух конкретных полей при получении значений.Update Query не работает в Android

Вот код, который я пытаюсь.

try{ 
SQLiteDatabase db = openOrCreateDatabase("iTimeDB", MODE_PRIVATE, null); 
    Cursor cur =db.rawQuery("UPDATE Activities SET Details = '"+ detail_edit.getText().toString() +"' AND Time = '"+Ctime+"' WHERE ID = '" +ID+"'", null); 
    Log.d("Time", ID); 
    cur.close(); 
    db.close(); 
    } 
    catch(Exception e) 
    { 
    e.printStackTrace(); 
    Log.v("SSS", e.toString()); 
    } 

Я также попытался ОБНОВЛЯЮТ эти поля отдельно, но такую ​​же проблему.

попытался это, но тот же результат не обновление

db.execSQL("UPDATE Activities SET Details = '" + detail_edit.getText().toString() + "', Time = '" + Ctime + "' WHERE ID = '" + ID + "'", null); 

РЕШЕНИЕ в aswered по laalto

db.execSQL("UPDATE Activities SET Details = ?, Time = ? WHERE ID = " + ID, 
    new String[] { 
     detail_edit.getText().toString(), 
     Ctime 
    }); 

ответ

4

rawQuery() просто компилирует SQL, но не выполняет его. Вместо этого используйте execSQL() для компиляции и запуска SQL.

Кроме того у вас есть проблемы синтаксиса SQL, который не вызывает синтаксическую ошибку:

UPDATE foo SET bar=1 AND baz=2 

действительно

UPDATE foo SET bar=(1 AND baz=2) 

где результат выражения в круглых скобках ставятся на первый столбец и второй столбец не изменяется.

Чтобы обновить более одного столбца, разделив их ,:

UPDATE foo SET bar=1,baz=2 

Tried this but same result no update

db.execSQL("UPDATE Activities SET Details = '" + detail_edit.getText().toString() + "', Time = '" + Ctime + "' WHERE ID = '" + ID + "'", null); 

Также проверьте, что условие WHERE фактически совпадает. Вы соответствуете ID как строковый литерал, я считаю, что вы хотите его без котировок ', чтобы вместо этого соответствовать целому числу.

Несмотря на то, что ваш код имеет уязвимость в SQL-инъекции: непосредственно помещает строку из пользовательского ввода в SQL. Используйте ? в SQL, где вы будете использовать буквальный и передать в Params в bindArgs:

db.execSQL("UPDATE Activities SET Details = ?, Time = ? WHERE ID = " + ID, 
    new String[] { 
     detail_edit.getText().toString(), 
     Ctime 
    }); 
+0

я обновил код, как вы предложили, но тот же результат ... проверьте обновление в вопросе –

+0

спасибо, что вторая часть работала ... –

0

Используйте это:

public void updateBattingFieldingData(int gameId, int batterTeamId, 
     int fielderTeamId) { 
    String string = " SELECT * FROM " + GAME_LIST_TABLE + " WHERE " 
      + KEY_GAME_ID + " = " + gameId; 
    ContentValues values = new ContentValues(); 
    values.put(KEY_BATTING_TEAM, batterTeamId); 
    values.put(KEY_FIELDING_TEAM, fielderTeamId); 
    db.update(GAME_LIST_TABLE, values, KEY_GAME_ID + " = " + gameId, null); 

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