如何在android房间实体内注释默认值?

Rüd*_*ger 16 android android-room

在查看新的Android Persistence Library 的@ColumnInfo文档时,我找不到任何关于如何注释SQL - "DEFAULT"值的信息.

Room甚至提供默认值的注释?

我目前的解决方案是手动创建相应的表...

CREATE TABLE MyTable (
  ...
  MyDefaultValuedCol  TEXT DEFAULT 'Default Value',
  MyDefaultFlagCol    INT  DEFAULT 1
)
Run Code Online (Sandbox Code Playgroud)

......把房间放在上面.

@Entity(tableName = "MyTable")
class MyClass {
    ...

    public String MyDefaultValuedCol;

    public boolean MyDefaultFlagCol;

}
Run Code Online (Sandbox Code Playgroud)

Sad*_*dan 10

@ColumnInfo您可以使用注释设置默认值 -

@ColumnInfo(defaultValue = "No name")
public String name;
Run Code Online (Sandbox Code Playgroud)

@ColumnInfo(defaultValue = "0")
public int flag;
Run Code Online (Sandbox Code Playgroud)

或者对于任何类型的数据类型,请检查此处的Google 开发人员文档的参考


Ali*_*iSh 9

Room没有默认值的任何注释,但您可以在实体中设置默认值,如下所示:

@Entity(tableName = "MyTable")
class MyClass {
    ...

    public String MyDefaultValuedCol = "defaultString";

    public boolean MyDefaultFlagCol = true;

}
Run Code Online (Sandbox Code Playgroud)

  • 当您直接执行语句时,例如仅更新某些字段时,这无济于事.我们需要能够在SQL中生成默认值. (5认同)
  • 请记住,这不会修改生成的SQLite表创建以设置默认值. (4认同)

Ahs*_*eed 5

随着Room Persistence 2.2.0的发布,在@ColumnInfo批注中添加了一个新属性,该属性可用于指定列的默认值。请参阅文档

@Entity(tableName = "users")
data class User(
    @PrimaryKey val id: Long,
    @ColumnInfo(name = "user_name", defaultValue = "temp") val name: String
    @ColumnInfo(name = "last_modified", defaultValue = "CURRENT_TIMESTAMP" ) val lastModified: String
)
Run Code Online (Sandbox Code Playgroud)

  • @QadirHussain Room 实际上将布尔值存储为“0”(假)或“1”(真)。您需要将布尔列的默认值设置为其中之一。 (3认同)
  • 感谢您提到这一点。但我们可以将布尔值(true/false)设置为默认值吗?我尝试过,但出现错误。@ColumnInfo(name = "is_deleted", defaultValue = false) var is_deleted:Boolean, 布尔文字不符合预期类型 String (2认同)
  • @Qadir,虽然我还没有尝试过,但我相信 Room 将布尔值存储为整数。假设是这种情况,根据 https://developer.android.com/reference/androidx/room/ColumnInfo.html#defaultValue(),您应该能够将 defaultValue = "0" 设置为 false。 (2认同)
  • 请注意,如果您只是使用 /@Insert 插入实体,则不会使用您在此处指定的默认值。在这种情况下,将使用 Java/Kotlin 中分配的任何值。将 /@Query 与 INSERT 语句一起使用并跳过此列以使用此默认值。 (2认同)