当前位置: 首页 > 知识库问答 >
问题:

如何在android studio的room数据库中存储arraylist数据

祁均
2023-03-14

我是android studio的初学者,希望在room数据库中存储语言数组列表。有人能建议我怎么做吗?

共有1个答案

况弘新
2023-03-14

您可以创建一个用@Entity注释的类,这样您就有了一个语言表。例如

@Entity
class Language {
    @PrimaryKey
    Long id = null;
    String language;
}

然后,用@Database注释的类将在实体列表中定义语言类,作为@Database注释的一部分。

然后,您可以使用语言的id列值来引用语言。如果使用该语言的任何东西都有一种语言(一种语言-许多(该语言的用户)关系),那么你就会有一个引用(映射/关联/关联)所使用语言的列,例如

@Entity(
        // Optional but enforces referential integrity
        foreignKeys = {
                @ForeignKey(
                        entity = Language.class,
                        parentColumns = {"languageId"},
                        childColumns = {"languageReference"},
                        // Optional within Foreign Key  manage deletion of parent by automatically deleting children
                        // i.e. deletions are cascaded to the children
                        onDelete = CASCADE,
                        // Optional  within Foreign Key manage update of parent column/columns that are referenced
                        onUpdate = CASCADE
                )
        }
)
class ObjectThatUsesALanguage {
    @PrimaryKey
    Long ObjectThatUsesALanguageId = null;
    @ColumnInfo(index = true) // optional but recommended index
    long languageReference; //<<<<< The single language used
}
  • 在这种情况下,将有一个使用语言表的对象

如果任何使用语言的东西都可以有多种语言,那么对于多个关系,您可以有一个关联/引用/映射表,该表至少有两列,一列用于引用该语言,另一列用于引用该语言的用户。该语言的用户将是一个相对简单的表,没有任何引用。所以你可以:-

@Entity
class ObjectThatUsesManyLanguages {
    @PrimaryKey
    Long ObjectThatUsesManyLanguagesId = null;
}

而且

@Entity(
        primaryKeys = {"ObjectThatUsesManyLanguagesReference","LanguageReference"},
        foreignKeys = {
                @ForeignKey(
                        entity = ObjectThatUsesManyLanguages.class,
                        parentColumns = {"ObjectThatUsesManyLanguagesId"},
                        childColumns = {"ObjectThatUsesManyLanguagesReference"},
                        onDelete = CASCADE,
                        onUpdate = CASCADE
                ),
                @ForeignKey(
                        entity = Language.class,
                        parentColumns = {"languageId"},
                        childColumns = {"LanguageReference"}
                )
        }
)
class ObjectThatUsesManyLanguagesToLanguageReference {
    long ObjectThatUsesManyLanguagesReference;
    @ColumnInfo(index = true)
    long LanguageReference;
}

但是,对于多-多关系,您可能需要一个POJO(或POJO)来检索语言用户以及语言(和/或相反)

例如。

class ObjectThatUsesManyLanguagesWithLanguages {
    @Embedded
    ObjectThatUsesManyLanguages objectThatUsesManyLanguages;
    @Relation(
            entity = ObjectThatUsesManyLanguages.class,
            parentColumn = "ObjectThatUsesManyLanguagesId",
            entityColumn = "languageId",
            associateBy = @Junction(
                     value = ObjectThatUsesManyLanguagesToLanguageReference.class,
                     parentColumn = "ObjectThatUsesManyLanguagesReference",
                     entityColumn = "LanguageReference"
            )
    )
    List<Language> languageList;
}

很多人倾向于忽略正确的/推荐的数据库使用(规范化),而只是希望将对象列表作为一列。

e、 g.类似(不能使用)的内容:-

@Entity
class ObjectThatUsesAListOfManyLanguages {
    @PrimaryKey
    long id;
    List<Language> languageList; 
}

如上所述不能使用,列不能是列表/数组

然而,它可以通过一个“holder”类来克服,比如

class LanguageHolder {
    List<Language> languageList;
}
  • 注意:如果没有其他属性,则语言可以是字符串

结合:-

@Entity
class ObjectThatUsesAListOfManyLanguages {
    @PrimaryKey
    long id;
    LanguageHolder languages; 
}

但是类型转换器需要将语言对象列表转换为可以存储的列类型。通常,这是列表的JSON字符串表示形式。

使用这种技术,不需要/使用语言表,因此如果使用语言对象/类,则不需要(不应该)使用@Entity对其进行注释。

 类似资料:
  • 我正在创建一个web应用程序,它有一个用户对象,每个用户对象都有一个需要存储到mySQL数据库表中的对象(食物)的ArrayList。我想将整个ArrayList存储到一列中。将其存储为Json会更好吗?或者我应该为每个用户创建一个表来存储ArrayList的各个项目吗?我唯一的问题是数据会被频繁编辑。 编辑:我有供用户和食物使用的桌子。其想法是,用户将食物表中的食物添加到他们的ArrayList

  • 我刚刚实现了离线数据保存的空间。但在实体类中,我会得到以下错误: 类如下: 提前道谢。

  • 我习惯于使用Arraylist,下面您可以看到我为存储数据所做的尝试: 这就是我尝试过的,但遗憾的是,这并不奏效: 下面你可以找到我剩下的代码,但上面的一个应该足以让我清楚的想要做什么... } 我创建了Dao类,如下所示::- @DAO公共接口DeckBuilderDao{

  • 由于我已经从下面的代码中导出了数据库文件,但我无法打开导出的文件,如何打开导出的文件?

  • 所以我根据YouTube上的教程创建了一个房间数据库。我有两个栏day and likes,每个栏都有int.目前,我已经用三行数据手动填充了数据库。 下面是手动填充数据库的代码: 在我的Dao类中,我当前有Insert、Update、deleteAll和getall...方法。这里是道: } 现在,我要从Room数据库中检索基于当天的数据。所以我想要第6天的likes数,它是1。我想检索数据并将

  • 我是Room数据库的新手,我有来自MSGraph API的JSON响应,这是日历事件的列表。 我想将此响应存储在Room数据库中。 来自改型数据的示例响应 我搜索了论坛,但没有得到任何正确的解决方案。我想将此响应存储在Room数据库中。谁能帮我找到正确的方法。 谢谢