【问题标题】:Check if column NULL or empty in Room DB检查 Room DB 中的列是否为 NULL 或为空
【发布时间】:2020-03-16 23:49:30
【问题描述】:

我想获取 MyModel 的列表,其 deletedAt 值为 NULL。 这是我的桌子:

@Entity(tableName = "my_table")
data class MyModel(
    @PrimaryKey
    @ColumnInfo(name = "id")
    var id: String,
    @ColumnInfo(name = "deletedAt")
    var deletedAt: Date? = null
)

道:

@Dao
abstract class MyDao : BaseDao<MyModel> {

@Query("SELECT * from my_table WHERE deletedAt IS NULL")
abstract fun getList(): LiveData<List<MyModel>>
}

我的类型转换器:

object DateTypeConverter {
@TypeConverter
@JvmStatic// It need to added else gives unwanted data binding error :D
fun fromTimestamp(value: Long?): Date? {
    return if (value == null) null else Date(value)
}

@TypeConverter
@JvmStatic
fun dateToTimestamp(date: Date?): Long? {
    return date?.time
}

但即使对于某些条目,deletedAt 值为 null,它也会返回所有 MyModel 数据。

【问题讨论】:

  • 您的查询似乎有误,您是在检查 createdAt null 还是 deletedAt?我觉得应该是@Query("SELECT * from my_table WHERE deletedAt IS NULL").
  • 抱歉,我已经更新了我的问题。

标签: java android kotlin android-room kotlin-coroutines


【解决方案1】:

尝试使用NULLIF 来检查nullempty,如下所示

NULLIF(deletedAt, '') IS NULL

完整的Query

@Query("SELECT * from my_table WHERE NULLIF(deletedAt, '') IS NULL")

【讨论】:

    【解决方案2】:

    可以在模型类中使用

    @ColumnInfo(name = "user_name")
    @NonNull private String strname;
    

    【讨论】:

      【解决方案3】:

      随便写

      @Query("SELECT * from my_table WHERE deletedAt IS NULL")
      

      一个常见的错误是写like null
      确保您的数据类是

      data class(
          val id : Long,
          val deletedAt : Long? 
          /....
      }
      

      【讨论】:

        猜你喜欢
        • 2021-11-21
        • 2012-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多