обновить базу данных sql с помощью ContentValues ​​и метода обновления - PullRequest
21 голосов
/ 21 сентября 2010

Я хотел бы обновить мою базу данных 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 ": синтаксическая ошибка: во время компиляции: UPDATE mytable SET location = ?, name =?ГДЕ id = 2010-09-21 15: 05: 36.995

Я не знаю, в чем проблема.Почему-то значения не поступают в оператор SQL.Я сделал почти то же самое с методом вставки, и он работал довольно хорошо.

много, спасибо, florian

Ответы [ 4 ]

48 голосов
/ 06 октября 2010

Вы используете функцию обновления неправильно. Должно быть так:

String where = "id=?";
String[] whereArgs = new String[] {String.valueOf(id)};

db.update(DATABASE_TABLE, dataToInsert, where, whereArgs);

Строки в массиве whereArgs подставляются для каждого '?' в переменной where.

т. если у вас было где = "имя =? И тип =? тогда первый '?' будет заменен на whereArgs [0], а второй на whereArgs [1].

4 голосов
/ 04 августа 2011

На самом деле, вам просто нужно добавить апострофы к предложению where.Таким образом, это должно быть:

String where = "id='" + id + "'"

(примечание: однако, это не лучшая практика, так как теоретически она открыта для инъекционных атак)

0 голосов
/ 07 июля 2017

У меня есть другой подход

    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;
}
0 голосов
/ 03 декабря 2016

На самом деле то, что вы написали, правильно. Синтаксис правильный. Но вы должны проверить это. String where = "id" + "=" + id; В приведенном выше объявлении «id» должен быть номером типа, а id должен быть int. И если id является типом TEXT, тогда следуйте @Adam javin answer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...