2012-07-19 17 views
12

Necesito actualizar un valor en una columna de una determinada tabla. He intentado esto:Cambiar un valor en una columna en sqlite

public void updateOneColumn(String TABLE_NAME, String Column, String rowId, String ColumnName, String newValue){ 
       String sql = "UPDATE "+TABLE_NAME +" SET " + ColumnName+ " = "+newValue+" WHERE "+Column+ " = "+rowId; 
       db.beginTransaction(); 
       SQLiteStatement stmt = db.compileStatement(sql); 
       try{ 
        stmt.execute(); 
        db.setTransactionSuccessful(); 
       }finally{ 
        db.endTransaction(); 
       } 

     } 

y yo llamo a este método como este:

db.updateOneColumn("roadmap", "id_roadmap",id,"sys_roadmap_status_mobile_id", "1"); 

lo que significa que quiero establecer el valor 1 en la columna sys_roadmap_status_mobile_id cuando id_roadmap = id.

El problema es que no pasa nada. ¿Dónde está mi error?

+0

En primer lugar, por favor leer sobre Ataques de inyección SQL –

+0

Y, ¿qué tipo de datos son sus columnas? Si son tipos de caracteres, probablemente quieras citar tus cadenas. Tampoco ha proporcionado el valor que contiene 'id' ni ningún dato de muestra ... –

Respuesta

27

solución fácil:

String sql = "UPDATE "+TABLE_NAME +" SET " + ColumnName+ " = '"+newValue+"' WHERE "+Column+ " = "+rowId; 

mejor solución:

ContentValues cv = new ContentValues(); 
cv.put(ColumnName, newValue); 
db.update(TABLE_NAME, cv, Column + "= ?", new String[] {rowId}); 
+0

Intenté esta solución antes, pero el valor no está establecido en la tabla. – Gabrielle

+1

¿Cómo se verifica eso? – WarrenFaith

+0

@Gabrielle ver si realmente está afectando a cualquier fila. verifique el número de filas afectadas –

1

La solución a continuación funciona para mí para la actualización de los valores de una sola fila:

public long fileHasBeenDownloaded(String fileName) 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 

    long id = 0; 

    try { 
     ContentValues cv = new ContentValues(); 
     cv.put(IFD_ISDOWNLOADED, 1); 

     // The columns for the WHERE clause 
     String selection = (IFD_FILENAME + " = ?"); 

     // The values for the WHERE clause 
     String[] selectionArgs = {String.valueOf(InhalerFileDownload.fileName)}; 

     id = db.update(TABLE_INHALER_FILE_DOWNLOAD, cv, selection, selectionArgs); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return id; 
} 
Cuestiones relacionadas