与我的数据库的单列一起使用的查询错误

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。

【讨论】:

以上是关于与我的数据库的单列一起使用的查询错误的主要内容,如果未能解决你的问题,请参考以下文章

PHP:可以与我的数据库表结构一起使用的 ORM 框架或库

与我的应用程序一起提供的开源数据库[关闭]

r 中的决策树没有与我的训练数据一起形成

当我尝试与我的数据库建立连接时出现错误

尝试将 mysql 模型中的表与我的数据库同步,我收到此错误

帮助将 ArrayList 与我的结果集一起使用