与我的数据库的单列一起使用的查询错误
Posted
技术标签:
【中文标题】与我的数据库的单列一起使用的查询错误【英文标题】:Error on query that works with a single column of my DB 【发布时间】:2020-02-29 16:09:33 【问题描述】:我正在使用带有 Room 库的 android 架构组件。基本上我想从两个不同查询中的两个单独列中获取结果。如果有人可以帮助或建议我如何系统化我的实体,我会很高兴,谢谢。
@Entity(tableName = "note_table")
public class Note
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "id_col")
private int id;
@Ignore
@ColumnInfo(name = "checks_col")
private ArrayList<Checks> checks = new ArrayList<>();
@ColumnInfo(name = "res_col")
private String result;
public Note(String result, ArrayList<Checks> checks)
this.checks = checks;
this.result = result;
public void setId(int id) this.id = id;
public int getId() return id;
public void setResult(String result)this.result = result;
public String getResult() return result;
public void setChecks(ArrayList<Checks> checks)this.checks = checks;
@TypeConverters(Converters.class)
public ArrayList<Checks> getChecks() return checks;
@Dao
public interface NoteDao
@Insert
void insert(Note note);
@Update
void update(Note note);
@Delete
void delete(Note note);
@Query("DELETE FROM note_table")
void deleteAllNotes();
@Query("SELECT * FROM note_table")
LiveData<List<Note>> getAllNotes();
@Query("SELECT res_col FROM note_table ORDER BY res_col DESC LIMIT 1 ") // <-- this is my try //
LiveData<Note> getResultNote();
错误如下:
The columns returned by the query does not have the fields [id] . Even though they are annotated as non-null or primitive. Columns returned by the query: [res_col]
警告信息如下:
Note has some fields [id_col] which are not returned by the query. If they are not supposed to be read from the result, you can mark them with @Ignore annotation. You can suppress this warning by annotating the method with @SuppressWarnings(RoomWarnings.CURSOR_MISMATCH). Columns returned by the query: res_col. Fields in Note: id_col, res_col.
【问题讨论】:
在Note实体类的构造函数中添加id即可,由于id为autoGenerate = true
,插入数据时传入null即可。
同样,查询有问题。
你能解释一下吗?更清楚的期望输出是什么?
根据您的查询,您只需要字符串(res_col)吗?
只是我想在当前列中获取最后保存的结果,即 res_col
【参考方案1】:
LiveData<Note> getResultNote();
想要返回一个 Note 对象,因为某些列被注释或暗示为非空 (即 private int id;
因为 int 是 Java 原语那么它不能为空) 则无法为查询返回的 String 构建 Note。
您希望 getResultNote()
返回一个 String 而不是 Note。
交替使用SELECT * .....
而不是SELECT res_col ......
来返回Note,然后从Note中获取String。
【讨论】:
以上是关于与我的数据库的单列一起使用的查询错误的主要内容,如果未能解决你的问题,请参考以下文章