繁体   English   中英

如何在同一个实体类中返回两个不同的数据库列,作为Android Room中的单个列?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM