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