Insertar o actualizar en SQlite y Android utilizando la base de datos.query ();
Hay una manera de cambiar mi función:
public categorie createCategoria(String categoria) { ContentValues values = new ContentValues(); values.put(MySQLiteHelper.COLUMN_NOME, categoria); values.put(MySQLiteHelper.COLUMN_PREF, 0); long insertId = database.insert(MySQLiteHelper.TABLE_CATEGORIE, null, values); Cursor cursor = database.query(MySQLiteHelper.TABLE_CATEGORIE, allCategorieColumns, MySQLiteHelper.COLUMN_ID + " = " + insertId, null, null, null, null); cursor.moveToFirst(); categorie newCategoria = cursorToCategorie(cursor); cursor.close(); return newCategoria; }
Esto es un inserto en bruto, me gustaría cambiar esta función para que se actualice o inserte en consecuencia. Me gustaría cambiar esta becouse ya estoy utilizando esta función en algunos lugares, pero ahora tengo que elegir si insertar una fila o actualizar (o ignorar la inserción) una fila con la misma COLUMN_NOME
. ¿Alguien puede ayudarme a hacer esto?
- Ordenar los datos de la base de datos y mostrarlos en la vista de lista
- Android: sqlite: cursor: getColumnIndex
- Android cómo obtener el elemento seleccionado de data spinner
- Cómo crear tablas anidadas en la base de datos SQLite ?? (androide)
- ¿Cuál es el propósito de FeedReaderContract y cómo definir la clase interna en OpenHelper Class
Quiero decir que me gustaría insertar una nueva fila SOLAMENTE si no hay otro con el mismo nombre (como de costumbre usted sabe).
- ¿Hay una manera fácil de agregar un timestamp de última modificación mientras se utiliza ORMLite y Android?
- ¿Cómo puedo encontrar mi archivo de base de datos SQLite en mi computadora?
- WhereArgs Eliminación de la base de datos SQLite
- Después de la actualización a Android 6.0, la base de datos SQLite se bloquea
- Tabla de puntuaciones altas
- Estrategia de clave principal de Android (aplicación distribuida)
- Cómo realizar una prueba de unidad de migración de base de datos entre versiones
- Arrastrar y soltar RecyclerView que se rellena desde SQLiteDatabase
Se puede llamar int nRowsEffected = database.update(...);
Si no hay filas efectuadas por la actualización, o bien la fila no existe (o usted ha manchado su update()
!) Por lo tanto necesita llamar a database.insert(...)
. Por supuesto si nRowsEffected> 0 entonces usted es hecho.
Puede utilizar insertWithOnConflict () si desea insertar o actualizar , dependiendo de si el registro existe o no:
SQLiteDatabase db = this.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(COLUMN_ID, id); contentValues.put(COLUMN_VALUE, value); // this will insert if record is new, update otherwise db.insertWithOnConflict(TABLE, null, contentValues, SQLiteDatabase.CONFLICT_REPLACE);
Puede utilizar execSQL y utilizar INSERT O REPLACE
String[] args = {"1", "newOrOldCategory"}; // where 1 is the category id getWritableDatabase().execSQL("INSERT OR REPLACE INTO table_name (idColoumn, categoryColumn) VALUES (?, ?)", args);
En primer lugar, tiene la función de escritura que es comprobar si existe id
en particular Tabla como:
/** * @param table_name * @param server_id * @return */ public boolean isServerIdExist(String table_name, int server_id) { long line = DatabaseUtils.longForQuery(mDB, "SELECT COUNT(*) FROM " + table_name + " WHERE id=?", new String[]{Integer.toString(server_id)}); return line > 0; }
Tienes que pasar table_name
e id
en que como
/** * INSERT in TABLE_ACCOUNT_DEVICE **/ public long insertOrUpdateAccountDevice(int server_id, int account_id, String device_name, String device_id, String last_active, String itp, String utp, int status) { ContentValues values = new ContentValues(); values.put(ACCOUNT_DEVICE_ACCOUNT_ID, account_id); values.put(ACCOUNT_DEVICE_DEVICE_NAME, device_name); values.put(ACCOUNT_DEVICE_DEVICE_ID, device_id); values.put(ACCOUNT_DEVICE_LAST_ACTIVE, last_active); values.put(ACCOUNT_DEVICE_ITP, itp); values.put(ACCOUNT_DEVICE_UTP, utp); values.put(ACCOUNT_DEVICE_STATUS, status); // 0=pending, 1=active, 2=Inactive, -1=not_found /** * isServerIdExists */ if (isServerIdExists(TABLE_ACCOUNT_DEVICE, server_id)) { values.put(ACCOUNT_DEVICE_SERVER_ID, server_id); return mDB.insert(TABLE_ACCOUNT_DEVICE, null, values); } else { return mDB.update(TABLE_ACCOUNT_DEVICE, values, ACCOUNT_DEVICE_SERVER_ID + " =? ", new String[]{Integer.toString(server_id)}); } }
Espero que te ayude.
- Android: ¿Cómo deshabilitar la lupa de selección en ICS?
- Android MediaPlayer sincroniza con animación como iOS AVPlayer y capa AVSynchronized