我对 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/