gpt4 book ai didi

android - Android Room 数据库中的@Query Update 不更新主键字段

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:56 25 4
gpt4 key购买 nike

我正在使用 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 是我的主键。在我的应用程序中,我想让用户查看完整的组列表,并通过输入新组的名称来更改组 DialogFragments 的名称。为了实现这样的功能,我创建了下一个 DAO @Query 方法:

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

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

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

最佳答案

我不能确定,但​​我猜你的查询是有效的,但由于你正在更改主键,你的数据库中留下了旧对象和新对象的实例。尝试检查您是否有一个同时具有旧 name_group 和新 name_group 的对象。此外,如果您希望允许您的用户更改组名,将您的主键移动到 UUID 或其他一些不会更改的键可能是有意义的。

关于android - Android Room 数据库中的@Query Update 不更新主键字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49521661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com