Android Room数据库

时间:2018-08-21 10:53:18

标签: java android sql android-room

在没有太多样板的情况下,我无法集中精力获取数据。

问题: 我有一个无法更改的数据库。其中有多个相同类型的字段几乎相同,例如,我有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

1 个答案:

答案 0 :(得分:0)

您在@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
}

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