Estoy usando la biblioteca de persistencia de habitaciones de Android para mi nuevo proyecto. Quiero actualizar algún campo de la tabla. Lo he intentado como en mi Dao
-
// Method 1:
@Dao
public interface TourDao {
@Update
int updateTour(Tour tour);
}
Pero cuando trato de actualizar usando este método, actualiza todos los campos de la entidad donde coincide con el valor de la clave principal del objeto tour. He usado@Query
// Method 2:
@Query("UPDATE Tour SET endAddress = :end_address WHERE id = :tid")
int updateTour(long tid, String end_address);
Está funcionando pero habrá muchas consultas en mi caso porque tengo muchos campos en mi entidad. Quiero saber cómo puedo actualizar algún campo (no todos) como Method 1
donde id = 1; (id es la clave primaria de generación automática).
// Entity:
@Entity
public class Tour {
@PrimaryKey(autoGenerate = true)
public long id;
private String startAddress;
private String endAddress;
//constructor, getter and setter
}
android
sql-update
android-room
Rasel
fuente
fuente
Respuestas:
Úselo
@Query
, como lo hizo en el Método 2.Entonces tenga entidades más pequeñas. O no actualice los campos individualmente, sino que tenga interacciones más detalladas con la base de datos.
OIA, no hay nada en la habitación en sí que haga lo que busca.
fuente
@Query
.true =1
,false=0
SELECT * FROM note_table WHERE isNoteArchived == 0
Según SQLite Update Docs :
Ejemplo:
Entidad:
Dao:
fuente
A partir de Room 2.2.0 lanzada en octubre de 2019, puede especificar una entidad de destino para las actualizaciones. Luego, si el parámetro de actualización es diferente, Room solo actualizará las columnas de entidad parciales. Un ejemplo de la pregunta OP lo mostrará un poco más claramente.
Tenga en cuenta que debe crear una nueva entidad parcial llamada TourUpdate, junto con su entidad Tour real en la pregunta. Ahora, cuando llame a update con un objeto TourUpdate, actualizará endAddress y dejará el valor startAddress igual. Esto funciona perfectamente para mí para mi caso de uso de un método insertOrUpdate en mi DAO que actualiza la base de datos con nuevos valores remotos de la API pero deja los datos de la aplicación local en la tabla solos.
fuente
Puede intentar esto, pero el rendimiento puede ser un poco peor:
fuente
Creo que no es necesario actualizar solo un campo específico. Solo actualice los datos completos.
Básicamente es una consulta determinada. No es necesario realizar ninguna consulta nueva.
Memo.class
Lo único que necesita saber es 'id'. Por ejemplo, si desea actualizar solo el "título", puede reutilizar el "contenido" y la "foto" de los datos ya insertados. En código real, use así
fuente
Si necesita actualizar la información de usuario para un ID de usuario específico "x",
El modelo de vista va a inicializar una instancia de DBManager para acceder a la base de datos. El código debería verse así:
Luego, simplemente actualice su elemento de usuario de esta manera, suponga que su ID de usuario es 1122 y el nombre de usuario es "xyz", que debe cambiarse a "zyx".
Obtener un userItem de id 1122 User object
Este es un código sin formato, espero que te ayude.
Codificación feliz
fuente