Подтвердить что ты не робот

Обновить базу данных 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. Я сделал почти то же самое с методом вставки, и это работало довольно хорошо.

4b9b3361

Ответ 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;
}