Android会议室数据库中的@Query更新不会更新主键字段

时间:2018-03-27 20:12:19

标签: android sql sql-update

我正在使用Room Database编写Android应用程序。我的数据库包含具有以下代码的GroupVc实体:

@Entity
public class GroupVc {

@ColumnInfo(name = "language")
private String language;


@NonNull
@PrimaryKey
@ColumnInfo(name = "name_group")

private String nameGroup;

public GroupVc(String language, String nameGroup) {
    this.language = language;
    this.nameGroup = nameGroup;
}

public String getLanguage() {
    return language;
}

public void setLanguage(String language) {
    this.language = language;
}

@NonNull
public String getNameGroup() {
    return nameGroup;
}

@NonNull
public void setNameGroup(String nameGroup) {
    this.nameGroup = nameGroup;
}
}

正如您所看到的,我的实体类包含两列,其中nameGroup是我的PrimaryKey。在我的应用程序中,我想让用户查看完整的组列表,并通过输入新的组名来更改Group DialogFragments的名称。为了实现这样的功能,我创建了下一个DAO @Query方法:

@Dao
public interface GroupVcDao {
@Query("UPDATE groupvc SET name_group= :newName WHERE name_group= :currentName")
void updateNameOfGroup(String currentName, String newName);
}

在此QUERY中,我想通过从RecyclerView(currentName param)获取GroupVc的现有名称并从DialogFragment(newName param)应用新名称来更改GroupVc的名称。 我的问题是这个QUERY没有带来任何影响,也没有更新名称。虽然我没有得到任何错误或例外。所以我需要知道:这样的QUERY是否正确?是否可以在主键是同时更改值和条件的情况下编写更新查询?

这是我在GitHub上完整项目的链接 https://github.com/LAHomieJob/VocaNote

1 个答案:

答案 0 :(得分:0)

我不确定,但是我的猜测是您的查询正在运行,但是由于您要更改主键,因此数据库将保留旧对象和新对象的实例。尝试检查是否有同时具有旧name_group和新name_group的对象。另外,如果您希望允许用户更改组名,则可以将主键移至UUID或其他不变的键。