如何在Room数据库中从Query中获取包含别名的数据
因为我们在Entity中获取数据只返回对象形式的数据,所以我们如何才能从Query中获取数据
SELECT *,(select count(uid) from UserTest) AS rec_count FROM UserTest
即此字段数据 rec_count
得到解决方案
第1步
首先创建新的Pojo类,在其中编写实体中编写的所有getter和setter,并为计数值包含int getter和setter
实体类:UserTest.java
@Entity
public class UserTest {
@PrimaryKey(autoGenerate = true)
private int uid;
@ColumnInfo(name = "username")
private String uname;
@ColumnInfo(name = "image_url")
private String imageUrl;
@ColumnInfo(name = "date")
@TypeConverters({DateConverter.class})
private Date DATE;
public UserTest() {
}
@Ignore
public UserTest(int uid) {
this.uid = uid;
}
@Ignore
public UserTest(String uname, String imageUrl, Date DATE) {
this.uname = uname;
this.imageUrl = imageUrl;
this.DATE = DATE;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public String getImageUrl() {
return imageUrl;
}
public void setImageUrl(String imageUrl) {
this.imageUrl = imageUrl;
}
public Date getDATE() {
return DATE;
}
public void setDATE(Date DATE) {
this.DATE = DATE;
}
}
新的Pojo类:Result.java
public class Result {
private int rec_count;
private int uid;
private String username;
private String image_url;
@TypeConverters({DateConverter.class})
private Date date;
public Result() {
}
public Result(int uid) {
this.uid = uid;
}
public Result(String uname, String imageUrl, Date DATE) {
this.username = uname;
this.image_url = imageUrl;
this.date = DATE;
}
public int getUid() {
return uid;
}
public void setUid(int uid) {
this.uid = uid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getImage_url() {
return image_url;
}
public void setImage_url(String image_url) {
this.image_url = image_url;
}
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
public int getRec_count() {
return rec_count;
}
public void setRec_count(int rec_count) {
this.rec_count = rec_count;
}
}
第2步:然后在我的Dao类中,即UserDaoTest.java
Witten查询并将返回类型设置为
List<Result>
即
@Query("SELECT *,(select count(uid) from UserTest) AS rec_count FROM UserTest")
List<Result> getAllUsersData();
这对我有用!
解释
每当我们在dao @Query anotation中编写查询时
在查询中,如果有*它在返回的pojo中找到所有列名,那么我们应该将它们全部包含在返回的pojo中
并且为了在别名中获取数据,我们还应该在返回Pojo类中包含在别名上命名的getter和setter变量
Hope this info will be helpful for others too!