使用会议室持久性库

时间:2017-10-06 09:19:55

标签: android android-sqlite android-room

如何使用会议室库更新整行,@ Update采用@Entity注释对象并通过引用主键更新它但是我将如何更新其他参数,如更新,其中某些值与单元格中的值匹配一排。

//Simple update
@Update
int updateObject(ObjectEntity... objectEntities);

//Custom Update
@Query(UPDATE TABLENAME ????)
int updateObject(ObjetEntity objectEntity,String field);

我应该通过什么代替????这样新的objectEntity将被字段值匹配的旧的替换。

4 个答案:

答案 0 :(得分:15)

由于Room不允许您动态定义列,因此您必须提前知道要匹配的列。假设您有一个实体Person,如下所示:

@Entity(tableName = "people")
public final class Person {

    @PrimaryKey
    @ColumnInfo(name = "uuid")
    public final String uuid;

    @ColumnInfo(name = "name")
    public final String name;

    @ColumnInfo(name = "is_alive")
    public final Boolean isAlive;

    public Person(String uuid, String name, Boolean isAlive) {
        this.uuid = uuid;
        this.name = name;
        this.isAlive = isAlive;
    }
}

您希望根据is_alive更新专栏name。您可以将方法编写为:

@Query("UPDATE people SET is_alive= :alive WHERE name = :name")
public abstract int setIsAliveByName(String name, int alive);

如果您有一个包含许多字段的实体,这当然会变得非常繁琐,因为您必须将每个字段作为单独的参数传递并手动编写整个UPDATE查询。

另一种方法是先执行SELECT查询以获取项目,使用新数据更新对象,然后将其保存回数据库。

在这一点上,你开始怀疑使用ORM是否真的让事情更轻松,值得你花时间......

答案 1 :(得分:6)

要更新多个列,请使用逗号分隔列。喜欢

@Query("UPDATE DailyConsumption SET quantity = :quantity ,date_time= :dateTime,date= :date WHERE id LIKE :id ")
int updateItem(int id,int quantity,long dateTime,String date);

答案 2 :(得分:1)

要根据会议室中的组合主键进行更新

@Query("UPDATE RecentDestinations SET readStatus=:readStatus WHERE name = :name AND street = :street AND state = :state AND postCode = :postcode")
void updateStatus(boolean readStatus,String name,String street,String suburb,String state,String postcode);

答案 3 :(得分:0)

房间中没有任何自定义更新功能来更新多列数据。但是您可以使用类似的逻辑。

假设您需要更新last_name

@Entity(tableName = "user")
public class User {
  @NonNull
    @PrimaryKey
    private int id;

    private String user_id;

    private String first_name;

    private String last_name;

    private String email;
}

首先,使用选择查询获得ObjectModel。

@Query("SELECT * FROM user WHERE email = :email")
User getUser(String email);

然后从该ObjectModel获取ID,并将该ID设置为新的ObjectModel

然后简单地更新为房间查询

@Update
void updateUser(User user);