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?

Quiero decir que me gustaría insertar una nueva fila SOLAMENTE si no hay otro con el mismo nombre (como de costumbre usted sabe).

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.

  • AutoCompleteTextView con CursorLoader y SimpleCursorAdapter
  • La manera más eficiente de almacenar un orden arbitrario?
  • Seleccione la última fila
  • Android rawquery con cláusula Where dinámica
  • SQLite e insertar la fecha actual en formato UTC
  • ¿Cuál es el método más rápido para realizar más de 64 combinaciones de tablas en SQlite?
  • Android: copia la base de datos de la carpeta de activos, pero sólo obtiene un archivo vacío
  • Encriptación de contraseña de Android SQlite?
  • ¿Cómo puedo ordenar mi base de datos SQLITE en orden descendente, para una aplicación de Android?
  • AsyncTask de Android y instancia de SQLite DB
  • RawQuery (consulta, selecciónArgs)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.