[英]Android : Can I use My Entity class using DISTINCT query Room Database
[英]How can I return two different database columns, within the same entity class, as a single column with Android Room?
我有一个使用Room持久性库的应用程序。
我有一个布局与此类似的实体:
+----+--------------+-------------+-------------+
| ID | NAME | 2LETTERCODE | 3LETTERCODE |
+----+--------------+-------------+-------------+
| 1 | Fred | FF | |
| 2 | Fred, Alt. | | FFA |
| 3 | Bob | BB | |
| 4 | Bob, Alt. | | BBA |
| 5 | George | GG | |
| 6 | George, Alt. | | GGA |
+----+--------------+-------------+-------------+
这是实体类:
public class Names {
@PrimaryKey
@ColumnInfo(name = "ID")
private Long id;
@ColumnInfo(name = "Name")
private String name;
@ColumnInfo(name = "TwoLetterCode")
private String twoLetterCode;
@ColumnInfo(name = "ThreeLetterCode")
private String threeLetterCode;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTwoLetterCode() {
return twoLetterCode;
}
public void setTwoLetterCode(String twoLetterCode) {
this.twoLetterCode= twoLetterCode;
}
public String getThreeLetterCode() {
return threeLetterCode;
}
public void setThreeLetterCode(String threeLetterCode) {
this.threeLetterCode= threeLetterCode;
}
}
我想要的是在实体类中有一个名为“ code
”的组合“虚拟”列的功能,该列将产生如下内容:
+----+--------------+------+
| ID | NAME | CODE |
+----+--------------+------+
| 1 | Fred | FF |
| 2 | Fred, Alt. | FFA |
| 3 | Bob | BB |
| 4 | Bob, Alt. | BBA |
| 5 | George | GG |
| 6 | George, Alt. | GGA |
+----+--------------+------+
这样我就可以使用类似的查询
SELECT * FROM Names WHERE code = 'FF';
那会给我第1行作为Names
对象? 和以下查询,
SELECT * FROM Names WHERE code = 'FFA';
会给我第2行作为Names
对象……依此类推。
有办法做到这一点,还是我不走运?
我认为您实际上可以运行OR
查询时不必担心创建新的虚拟表。 我认为您可以执行以下操作。
@Query("SELECT * FROM Names WHERE 2LETTERCODE = :code OR 3LETTERCODE = :code")
public List<Names> getCode(int code);
方法1:在查询中使用OR
@Query("SELECT * FROM Names WHERE 2LETTERCODE = :code OR 3LETTERCODE = :code")
public List<Names> getNamesByCode(String code);
方法2:使用两种不同的方法
在DAO中:
@Query("SELECT * FROM Names WHERE 2LETTERCODE = :code)
public List<Names> getNamesBy2LetterCode(String code);
@Query("SELECT * FROM Names WHERE 3LETTERCODE = :code)
public List<Names> getNamesBy3LetterCode(String code);
在调用类(存储库/ ViewModel /活动)中:
public List<Names> getNamesByCode(String code){
if (code.length()==2) return dao.getNamesBy2LetterCode(code);
else return getNamesBy3LetterCode(code);
}
确保在主线程(或UI线程)以外的任何线程中处理数据库操作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.