简体   繁体   English

检查列 NULL 或 Room DB 中是否为空

[英]Check if column NULL or empty in Room DB

I want to get a list of MyModel whose deletedAt value is NULL .我想得到一个MyModel的列表,它的deletedAt值为NULL Here is my table:这是我的桌子:

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

Dao:道:

@Dao
abstract class MyDao : BaseDao<MyModel> {

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

My TypeConverter:我的类型转换器:

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
}

But it returns all of MyModel data even if deletedAt values are null for some entries.但是,即使对于某些条目,deletedAt 值是 null,它也会返回所有 MyModel 数据。

Try to use NULLIF to check null or empty like below尝试使用NULLIF检查null或如下所示为empty

NULLIF(deletedAt, '') IS NULL

Complete Query is完整Query

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

You can use in model class您可以在 model class 中使用

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

Just write写吧

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

a common mistake is writing like null一个常见的错误是写like null
make sure that your data class is确保您的数据 class 是

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM