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

标签 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 是我的主键。在我的应用程序中,我想让用户查看完整的组列表,并通过输入新组的名称来更改组 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/

相关文章:

sql - 选择小于 site_name 的 site_acr

sql - 从下表获取唯一集的最佳 SQL 查询

Android Volley 似乎没有发布 HTTP 参数

SQL Server 中的 MySQL INDEX() 语法等效

java - 将ImageView保存到sdcard android

MySQl - 通过计算其他表中的数据来更新字段

mysql - 如何知道mysql中修改表的用户

mysql - 关于 Laravel4 中的重复键更新查询

java - Android Xml Pull 解析器错误 - SitesDownloadTask.onPostExecute

android - 创建 App Engine 连接的 Android 项目失败