首页 > 解决方案 > Android 房间数据库

问题描述

在没有太多样板的情况下,我无法理解如何获取数据。

问题:我有一个无法更改的数据库。其中有多个相同类型的字段几乎相同,例如我有 text_en 和 text_fr (两者都是不同语言英语和法语的相同单词),我得到 + 71 个相同字段但不同语言。

我需要的是类似

@Entitiy(tableName = "blabla")
class X {

    private String textTarget;
    private String textMain;

    ...
}

我应该如何做我的 Dao 界面以获得所需的语言并映射到 x 类

例如,应该工作的是更新实体ColumnInfo(name ="text_en")

@Query("select  :main , :target from phrases where :id ")
    List<X> getPhrase(String main,String target);


usage : getPhrase("text_en","text_esp");
   // for example returning object X with field main = "hello" and target " holla")

上面的示例返回以下错误:

error: Not sure how to convert a Cursor to this method's return type

标签: javaandroidsqlandroid-room

解决方案


您在@Query 中输入的是一个 SQL 语句,您实际上可以在 sqlite 命令行实用程序或任何桌面软件中测试它们以验证它们的正确性。因此,如果您想要翻译成所需的语言,它应该如下所示:

@Query("SELECT :main AS text_main, :target AS text_target FROM `phrases` WHERE id = :id)
List<Translation> getTranslationById(String firstLang, String secondLang, long id);

翻译应该是这样的:

class Translation {
    @ColumnInfo("text_main")
    String main;
    @ColumnInfo("text_target")
    String target;

    //setters, getters, etc
}

此类仅用作方法的返回值。


推荐阅读