actualizar la base de datos sql con ContentValues ​​y el método de actualización

Me gustaría actualizar mi base de datos sql lite con el método nativo de actualización de la clase SQLiteDatabase de 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(); } 

pero obtengo el siguiente error: android.database.sqlite.SQLiteException: cerca de “15”: error de syntax:, al comstackr: UPDATE mytable SET location = ?, name =? DONDE id = 2010-09-21 15: 05: 36.995

No sé cuál debería ser el problema. De alguna manera, los valores no llegan a la statement sql. Hice casi lo mismo con el método de inserción y funcionó bastante bien.

muchos thx, florian

Estás usando la función de actualización incorrecta. Debería ser así:

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

Las cadenas en la matriz whereArgs se sustituyen por cada ‘?’ en la variable where

es decir. si tuviera where = “name =? AND type =? then the first ‘?’ Sería reemplazado por whereArgs [0] y el segundo por whereArgs [1].

En realidad, solo necesita agregar apóstrofes a su cláusula where. Entonces debería ser:

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

(Nota: sin embargo, esta no es la mejor práctica, ya que teóricamente queda abierta a los ataques de inyección)

En realidad, lo que escribiste exactamente es correcto. La syntax es correcta Pero tienes que verificar esto. Cadena donde = “id” + “=” + id; En la statement anterior, “id” debe ser número de tipo e id debe ser int. Y si id es un tipo de TEXTO, entonces sigue la respuesta de Adam Javin.

Tengo otro enfoque

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