【问题标题】:DAO query does not work with MIN MAX functionsDAO 查询不适用于 MIN MAX 函数
【发布时间】:2018-07-31 14:11:19
【问题描述】:

我为我的 android 应用程序设计了一个房间数据库。我所有的 DAO 接口方法都可以工作,除非我在查询中有最小/最大函数。

这是实体类的模拟:

@Entity
public class Data {

    @PrimaryKey
    @NonNull
    private String timestamp;

    @ColumnInfo(name = "item_key")
    private int itemKey;

    ...Other stuff...
}

这是一个只包含所需部分的类:

public class HeaderData {
    private int item_key;
    private String timestamp;

    public HeaderData(int item_key, String timestamp) {
        this.item_key = item_key;
        this.timestamp = timestamp;
    }
}

这里是DAO接口:

@Dao
public interface LocationDao {

    @Insert
    void insertSingleRecord(Data data);

    @Query("SELECT * FROM Data")
    List<LocationData> getEverything();

    @Query("SELECT * FROM Data WHERE item_key = :itemKey")
    List<Data> getDbData(int itemKey);

    // I dont know why this query is not working!
    @Query("SELECT item_key, MIN(timestamp) FROM LocationData GROUP BY item_key")
    List<HeaderData> getHeaderData();
}

在最后一个查询 getHeaderData() 中,MIN 函数似乎不起作用,我得到了一个带有正确 item_keys 的标题数据列表,但所有 timestamps 都是 null 。有人知道这个问题吗?

【问题讨论】:

    标签: android sql dao android-room android-jetpack


    【解决方案1】:

    问题是您返回的 pojo 与您从数据库中要求的不完全一致:

    // I dont know why this query is not working!
        @Query("SELECT item_key, MIN(timestamp) FROM LocationData GROUP BY item_key")
        List<HeaderData> getHeaderData();
    

    HeaderData 确实有一个 item_key,但 MIN(timestamp) 与时间戳不同,它是另一列。这就是时间戳为空的原因。你可以做的是这样定义你的 pojo:

    public class HeaderData {
        private int item_key;
        private String minTimestamp;
    
    
        public HeaderData(int item_key, String minTimestamp) {
            this.item_key = item_key;
            this.minTimestamp = minTimestamp;
        }
    }
    

    并重新定义您的查询:

        @Query("SELECT item_key, MIN(timestamp) as minTimestamp  FROM LocationData GROUP BY item_key")
        List<HeaderData> getHeaderData();
    

    【讨论】:

    • 知道如何获取 MIN 或 MAX 值吗?出于某种原因,我总是得到 0,因为函数的返回类型应该是 "int" 。
    猜你喜欢
    • 2019-04-15
    • 1970-01-01
    • 2017-02-08
    • 2015-09-28
    • 2016-10-26
    • 1970-01-01
    • 2016-11-24
    • 2017-11-05
    • 2014-09-24
    相关资源
    最近更新 更多