Android Room无法从架构中识别列名(使用列名别名)

Android Room无法从架构中识别列名(使用列名别名),android,android-room,Android,Android Room,我对Android开发和使用它的Room持久性库还比较陌生。我目前面临的问题是以下错误: 错误:查询有问题:[SQLITE\u error]SQL错误或缺少数据库(没有这样的列:s\u abb) 但是,我的表架构(此列正由其引用)确实包含此名称的列。下面是我如何在Android中定义我的实体 @Entity public class stops { @PrimaryKey @NonNull @ColumnInfo(name = "s_name") private String s_name;

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

错误:查询有问题:[SQLITE\u error]SQL错误或缺少数据库(没有这样的列:s\u 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接口中编写的查询的屏幕截图:。我个人认为主要的问题是Room可能无法识别我在子查询和列名中使用的别名。我这样想对吗?我希望我的截图能有所帮助。正如许多解决方案所指出的,我确实确保在SQL语句之间添加适当的间距。如果你们中有人需要我提供更多信息,我很乐意效劳!谢谢你

正如弗拉基米尔·格拉登指出的那样,我查询的
s_abb
列上设置了一个
@Ignore
注释。正如Android在
@Ignore
注释上的文档所述,“忽略房间处理逻辑中的标记元素”:

这基本上意味着房间完全忽略了它

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

您的列被标记为忽略注释,并且。。。被房间忽略了!请注意,对于不打算保存在持久性存储中的字段,只应使用@Ignore。例如,当对象在内存中使用时,助手字段(如接收日期)和其他您可能需要的内容。哦,哇,那正好从我身边经过。谢谢我刚刚读了你发给我的文件(谢谢你的提示)。请确认,@Ignore应该只用于在整个应用程序中不使用的列?现在我得到一个错误,查询返回的列没有字段s\u name。但是,当我在SQLite上运行它时,它确实返回s_name值。这可能是一个别名问题吗?删除所有的忽略注释并尝试清理/重建(甚至使android studio缓存无效,然后清理重建)。另外,您最好不要在列名别名中使用下划线,尝试使用stopName、stopAdd和Getter/Setter等名称。谢谢您,先生,我取出了ignore语句,我还意识到我的查询返回了两个字符串列值,但是我的方法需要实体类型。我一下课就把这两个问题都列为答案!再次感谢!