Android Room追加字符串到选择列



在我的表中,我有以下结构:

CREATE TABLE "species" (
"_id"   TEXT NOT NULL,
"name"  TEXT,
"name_es"   TEXT,
"name_it"   TEXT,
"name_fr"   TEXT,
"name_de"   TEXT,
PRIMARY KEY("_id")
);

如你所见,我的"name"列以多种语言进行本地化,并在末尾附加_isocode。

我想弄清楚如何操作DAO查询以便在Select本身中附加lang参数,如下所示:

@Query("SELECT name " + lang +
" FROM species")
List<SpeciesEntity> getSpecies(String lang);

但它根本不工作(它甚至不编译),我也试过使用SQLITE concat||这样:

@Query("SELECT name||:lang " +
" FROM species")
List<SpeciesEntity> getSpecies(String lang);

但是它也不起作用,它只是将_es同码附加到实际的name列值而不是检索name_es列值。有什么方法可以达到我的需要吗?

SQLite不支持动态sql,所以不能动态创建列名

您可以使用CASE表达式来检查值:lang并返回您应该选择的列:

SELECT CASE :lang
WHEN '_es' THEN name_es
WHEN '_it' THEN name_it
WHEN '_fr' THEN name_fr
WHEN '_de' THEN name_de
ELSE name
END AS my_name
FROM species

我假设:lang是一个以_开头的字符串,就像_xx一样。

最新更新