Обновить базу данных sql с помощью ContentValues и метода обновления
Я хотел бы обновить свою базу данных SQL lite с помощью собственного метода update класса SQLiteDatabase android.
ContentValues dataToInsert = new ContentValues();
dataToInsert.put("name", "flo");
dataToInsert.put("location", "flotown");
String where = "id" + "=" + id;
try{
db.update(DATABASE_TABLE, dataToInsert, where, null);
}
catch (Exception e){
String error = e.getMessage().toString();
}
но я получаю следующую ошибку:
android.database.sqlite.SQLiteException: near "15": syntax error: ,
while compiling: UPDATE mytable SET location=?, name=? WHERE
id=2010-09-21 15:05:36.995
Я не знаю, в чем должна быть проблема. Почему-то значения не поступают в инструкцию SQL. Я сделал почти то же самое с методом вставки, и это работало довольно хорошо.
Ответы
Ответ 1
Вы неправильно используете функцию обновления. Это должно быть так:
String where = "id=?";
String[] whereArgs = new String[] {String.valueOf(id)};
db.update(DATABASE_TABLE, dataToInsert, where, whereArgs);
Строки в массиве whereArgs заменяются на каждый '?' в переменной где.
т. если у вас было где = "name=? И type =?, тогда первый '?' будет заменено на whereArgs [0], а второе на whereArgs [1].
Ответ 2
На самом деле вам просто нужно добавить апострофы к вашему предложению where. Так что это должно быть:
String where = "id='" + id + "'"
(обратите внимание: однако, это не лучшая практика, поскольку она теоретически остается открытой для инъекционных атак)
Ответ 3
Собственно, что именно вы написали правильно. Синтаксис правильный.
Но вы должны проверить их. String where = "id" + "=" + id;
В вышеприведенной декларации "id" должен быть номером типа, а id должен быть int.
И если id является типом ТЕКСТА, то следуйте [email protected] javin.
Ответ 4
У меня есть другой подход
public boolean updateEmployee(TalebeDataUser fav) {
SQLiteDatabase database = dbHelper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(DBHelper.COLUMN_ID, fav.getId());
contentValues.put(DBHelper.COLUM_AD, fav.getAd());
contentValues.put(DBHelper.COLUMN_NUMARA, fav.getNumara());
contentValues.put(DBHelper.COLUMN_YURD_ID, fav.getYurtID());
contentValues.put(DBHelper.COLUMN_EGITIM_ID, fav.getEgitimTur());
contentValues.put(DBHelper.COLUMN_TEL, fav.getTel());
contentValues.put(DBHelper.COLUMN_EMAIL, fav.getEmail());
contentValues.put(DBHelper.COLUMN_ADDRESS, fav.getAdres());
String whereClause = DBHelper.COLUM_AD + " = ? AND " + DBHelper.COLUMN_NUMARA + " = ? ";
final String whereArgs[] = {fav.getAd(), String.valueOf(fav.getNumara())};// old nameler taranıyor
int affectedRows = database.update(DBHelper.TABLE_NAME_OGR, contentValues, whereClause, whereArgs);
return affectedRows > 0;
}