【问题标题】:Android Room DatabaseAndroid 房间数据库
【发布时间】:2018-08-21 10:53:18
【问题描述】:

如果没有太多样板,我无法理解如何获取数据。

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

【问题讨论】:

  • 您希望 getPhrase 方法返回您的自定义类型对象吗?
  • 什么是text_targettext_main?对我来说还不是很清楚。请提供此方法的调用示例和所需的结果(例如 getPhrase("hello", "text_spain") -> X{text_target = "hola", text_main="hello"}
  • 是的,实体类无法将“text_de”例如映射到 textTarget 并且我无法根据匹配我的查询条件更改实体 ColumInfo 名称
  • 好的,但是这里要翻译的词是怎么指定的呢?或者任务是获取表中所有翻译的单词从目标语言到目的地?
  • 我想像getPhrase(String currentLanguage, String languageToTranslateInto, String wordToTranslate)

标签: java android sql android-room


【解决方案1】:

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

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

【讨论】:

  • 问题是在我的数据库中我没有“text_main”我有“text_”+语言代码。所以@ColumnInfo("text_main") 将不起作用我有超过 70 多种语言代码..
  • 请仔细阅读:SELECT :main AS text_main, :target AS text_target FROM 'phrases'
猜你喜欢
  • 2022-01-24
  • 2018-08-17
  • 2021-08-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-06
相关资源
最近更新 更多