Android Room 无法从模式中识别列名(使用列名的别名)

标签 android android-room

我对 Android 开发和使用其 Room 持久性库还比较陌生。我目前面临的问题是以下错误:

错误:查询有问题:[SQLITE_ERROR] SQL 错误或缺少数据库(没有这样的列:s_abb)

但是我的表架构(引用此列的)确实包含此名称的此列。这是我在 Android 中定义我的实体的方式

@Entity
public class stops {

@PrimaryKey
@NonNull
@ColumnInfo(name = "s_name")
private String s_name;
@Ignore
@ColumnInfo(name = "s_abb")
private String s_abb;
@Ignore
@ColumnInfo(name = "Comments")
private String Comments;

public String getS_abb() {
    return s_abb;
}

public void setS_abb(String s_abb) {
    this.s_abb = s_abb;
}

public String getS_name() {
    return s_name;
}

public void setS_name(String s_name) {
    this.s_name = s_name;
}

public String getComments() {
    return Comments;
}

public void setComments(String comments) {
    Comments = comments;
}


}

我已经在 SQLite Studio 中测试了查询,它确实返回了预期的数据。这是在 DAO 界面中编写的查询的屏幕截图:Query .我个人认为主要问题是 Room 可能无法识别我在子查询和列名中使用的别名。我这样想对吗?我希望我的屏幕截图有所帮助。我确实确保在 SQL 语句之间添加适当的间距,正如这里的许多解决方案所指出的那样。如果你们中的任何人需要我提供更多信息,我很乐意效劳!谢谢

最佳答案

正如 Vladimir Gladun 所指出的,我正在查询的列 s_abb 设置了一个 @Ignore 注释。正如 Android 关于 @Ignore 注释的文档指出“忽略 Room 处理逻辑中的标记元素”: https://developer.android.com/reference/android/arch/persistence/room/Ignore .

这基本上意味着 Room 完全无视它。

但这不是唯一的问题,我的方法需要 Entity 类型的值 而来 self 最外层查询的 SELECT 语句返回的是 String 类型的值。修复这两个错误解决了我的问题。

关于Android Room 无法从模式中识别列名(使用列名的别名),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53218517/

相关文章:

android - Admob 安全异常 : Permission Denial

android - 缺少支持库 v7 23

android - 如何在android中的退格键上删除哪个字符

android - 使用 Android 房间关系进行搜索查询

android - 如何在 android 中使用 Room Persistence Library 查询嵌套的嵌入式对象?

android - 关于 Room DB 中的关系,我应该采用哪种方法?

Java ServerSocket 抛出空指针异常

android - 如果Sqlite和Room都存在于Android中具有相同数据库名称的同一个项目中,会不会有任何冲突?

android - 即使添加 androidx.room:room-ktx 后,房间错误 : Type of the parameter must be a class annotated with @Entity or a collection/array of it.

android - 有什么方法可以检测 Android fragment 中的 userInterations 吗?