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:
- Base de datos SQLite de Android compartida entre actividades
- Asegúrese de que SQLite en Android utiliza UTF-8 como un conjunto de caracteres
- ¿Cómo puedo almacenar un arraylist de objetos personalizados?
- Citas de Android dentro de una cadena de consulta SQL
- cómo crear base de datos una sola vez, a continuación, leer y escribir varias veces desde él, SQLite, OpenHelper, Android
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.
- Base de datos en el estudio android
- SQLite rawQuery campos de selecciónArgs y enteros
- Limitaciones de SQLITE en Android - 25 tablas con 15 columnas cada una y 10k filas por tabla
- ¿Por qué mi Android SQLite DB ha corrompido de repente?
- ¿Cómo puedo crear una función definida por el usuario en SQLite?
- Insertar datos JSON en la base de datos SQLite en android
- Android SQLite Eliminar fila de la tabla Donde 2 Argumentos
- Conexión de SQLite se filtró aunque todo se cerró
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" ):
- Cambia dinámicamente los valores de colors.xml para cambiar la apariencia de la aplicación android
- Cómo "destruir" varias actividades de Android al mismo tiempo