DAO 查询不适用于 MIN MAX 函数
DAO query does not work with MIN MAX functions
我为我的 android 应用程序设计了一个房间数据库。我所有的 DAO 接口方法都在工作,除非我在查询中有一个 min/max 函数。
这是实体的模拟 class:
@Entity
public class Data {
@PrimaryKey
@NonNull
private String timestamp;
@ColumnInfo(name = "item_key")
private int itemKey;
...Other stuff...
}
这里是一个 class 只有需要的部分:
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
函数似乎不起作用,我得到了 header 数据的列表,其中 item_key
是正确的,但所有 timestamp
s 是 null
。有人知道这个问题吗?
问题是您的 return 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();
我为我的 android 应用程序设计了一个房间数据库。我所有的 DAO 接口方法都在工作,除非我在查询中有一个 min/max 函数。
这是实体的模拟 class:
@Entity
public class Data {
@PrimaryKey
@NonNull
private String timestamp;
@ColumnInfo(name = "item_key")
private int itemKey;
...Other stuff...
}
这里是一个 class 只有需要的部分:
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
函数似乎不起作用,我得到了 header 数据的列表,其中 item_key
是正确的,但所有 timestamp
s 是 null
。有人知道这个问题吗?
问题是您的 return 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();