Обновить базу данных sql с помощью ContentValues ​​и метод обновления

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

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

Много thx, florian

Solutions Collecting From Web of "Обновить базу данных sql с помощью ContentValues ​​и метод обновления"

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

 String where = "id=?"; String[] whereArgs = new String[] {String.valueOf(id)}; db.update(DATABASE_TABLE, dataToInsert, where, whereArgs); 

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

то есть. Если у вас было где = "name =? AND type =? Then the first '?' Будет заменено на whereArgs [0], а второе на гдеArgs [1].

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

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

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

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

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

  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; }