Cómo modificar el valor de un elemento en un SQLite?

Suponiendo que tengo esta estructura de base de datos sqlite:

ID PRODUCT_NAME AVAILABILITY 1 foo 0 2 bar 1 3 baz 0 4 faz 1 

¿Cómo puedo modificar el valor de la AVAILABILITY fom 1 -> 0 donde PRODUCT_NAME = 'bar' ? Algo así, Pseudocod:

 db.execSQL( "UPDATE TABLE" + Table_name + "MODIFY" + availability + "=" + 0 + "WHERE" + product_name + "like ? " + 'bar'); 

Supongo que también tengo que soltar y volver a crear la tabla utilizando métodos onCreate () y onUpgrade (), ¿verdad? Algún código será muy apreciado.

Utilizar esta:

 SQLiteDatabase db=dbHelper.getWritableDatabase(); String sql="update "+Table_name+" set availability='0' where product_name like 'bar'"; Object[] bindArgs={"bar"}; try{ db.execSQL(sql, bindArgs); return true; }catch(SQLException ex){ Log.d(tag,"update data failure"); return false; } 

También puedes usar los métodos update() , insert() , query() , delete() que Android te da

 // define the new value you want ContentValues newValues = new ContentValues(); newValues.put("AVAILABILITY", 0); // you can .put() even more here if you want to update more than 1 row // define the WHERE clause w/o the WHERE and replace variables by ? // Note: there are no ' ' around ? - they are added automatically String whereClause = "PRODUCT_NAME == ?"; // now define what those ? should be String[] whereArgs = new String[] { // in order the ? appear "bar" }; int amountOfUpdatedColumns = db.update("YourTableName", newValues, whereClause, whereArgs); 

La ventaja aquí es que obtiene la sintaxis SQL correcta de forma gratuita. También escapa de sus variables que evita que las cosas malas sucedan cuando se utiliza "hax ' DROP TABLE '" como argumento para ? .

Lo único que aún no es seguro es usar la column LIKE ? Con argumentos como "hello%world_" porque % (coincide con algo de varios caracteres) y _ (coincide con 1 char) no se escapan. Usted necesitaría escapar manualmente (por ejemplo, colocar un ! Antes de cada _ o % ) y usar

 String whereClause = "LIKE ? ESCAPE '!'" String[] whereArgs = new String[] { likeEscape("bar") // likeEscape could be replaceAll("!", "!!").replaceAll("%", "!%").replaceAll("_", "!_") maybe } 

Btw: su línea de código único debería funcionar si utiliza

 db.execSQL( "UPDATE " + Table_name + " SET " + availability + "=0 WHERE " + product_name + " like 'bar'"); 

Desea update no alter . alter es para el esquema de base de datos, la update es para los datos almacenados en él.

Por ejemplo: update TABLE_NAME set AVAILABILITY = 0 where PRODUCT_NAME like 'bar';

Además, no sólo pegue las cadenas juntas para crear una consulta SQL. Utilice una instrucción preparada u otra biblioteca de creación de instrucciones para evitar ataques y errores de inyección de SQL.

SqlLite utiliza "SQL". Necesita una "actualización" de SQL

 db.execSQL( "update mytable set availability=0 where product_name like '%" + bar + "%'"); 

Aquí hay un buen enlace para los comandos SQL "select", "update", "insert" y "delete" ( "CRUD" ):

http://www.w3schools.com/sql/default.asp

  • Android SQLiteOpenHelper - clase diferente para cada tabla?
  • En la base de datos Sqlite, Cómo insertar varias filas en la tabla al mismo tiempo
  • Base de datos onUpgrade - oldVersion - newVersion
  • Cómo contar el número de columnas en una tabla en SQLITE?
  • SQLite Android. No puede abrir el archivo de base de datos
  • Cómo crear tablas anidadas en la base de datos SQLite ?? (androide)
  • Mal funcionamiento al eliminar de la tabla de base de datos Sqlite (comportamiento extraordinario de relación)
  • UnsatisfiedLinkError (Método nativo no encontrado)
  • ¿Cómo eliminar todos los registros de la tabla en sqlite con Android?
  • Ormlite leer Fecha como 'yyyy-MM-dd'
  • ¿Qué bandera usar en SimpleCursorAdapter?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.