【问题标题】:@Query Update in Android Room Database doesn't update primary key fieldAndroid Room 数据库中的@Query Update 不会更新主键字段
【发布时间】:2018-09-06 09:07:59
【问题描述】:

我正在使用 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。在我的应用程序中,我想让用户查看完整的组列表,并通过输入新组的名称来更改组 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 参数)获取 GroupVc 的现有名称并从 DialogFragment(newName 参数)应用新名称来更改 GroupVc 的名称。 我的问题是这个 QUERY 没有带来任何效果,也没有更新名称。虽然我没有收到任何错误或异常。所以我需要知道:这样的查询是否正确?是否可以编写主键同时改变值和条件的更新查询?

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

【问题讨论】:

  • 您找到解决方案了吗?我也面临同样的问题
  • 男人!你救了我的命!!谢谢!!
  • 干得好!!!到处都在找这个……你去吧!谢谢!

标签: android sql sql-update


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-25
    • 2013-03-27
    • 1970-01-01
    • 2023-02-24
    • 1970-01-01
    • 1970-01-01
    • 2019-12-30
    相关资源
    最近更新 更多