Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 可选查询参数不适用于文件室_Android_Kotlin_Android Room_Android Jetpack - Fatal编程技术网

Android 可选查询参数不适用于文件室

Android 可选查询参数不适用于文件室,android,kotlin,android-room,android-jetpack,Android,Kotlin,Android Room,Android Jetpack,假设我们有以下数据库条目: @Entity data class Dog( @ColumnInfo(name = "name") val name: String, @ColumnInfo(name = "breed") val breed: String? ) 正如你所看到的,并不是每只狗都有明确的品种。现在我们要做一个查询,根据它们的品种搜索所有的狗 @Dao interface DogDao { @Query("SELECT * FROM dogs WHERE

假设我们有以下数据库条目:

@Entity
data class Dog(
    @ColumnInfo(name = "name") val name: String,
    @ColumnInfo(name = "breed") val breed: String?
)
正如你所看到的,并不是每只狗都有明确的品种。现在我们要做一个查询,根据它们的品种搜索所有的狗

@Dao
interface DogDao {

    @Query("SELECT * FROM dogs WHERE breed = :breed")
    fun getByBreed(breed: String?): List<Dog>
}
@Dao
接口道{
@查询(“从狗中选择*,其中繁殖=:繁殖”)
有趣的GetBybride(品种:字符串?):列表
}
有时我们想搜索特定品种的狗,有时我们想搜索没有定义品种的狗。问题是,在第二种情况下,上述查询将不起作用。为什么?当
getbybride(breed:)
方法中的
breed
参数为空时,文件室会将此查询转换为如下内容:

从繁殖为空的狗中选择*

不幸的是,对于SQLite,查询空值应该如下所示:

从品种为空的狗中选择*


问题是,如何定义接受可选参数的查询?

您应该检查SQLite操作符。直接取自此

“是”和“不是”操作符的工作方式类似于=和!=除非一个或两个操作数都为空。在这种情况下,如果两个操作数都为NULL,则IS运算符的计算结果为1(true),而IS NOT运算符的计算结果为0(false)。如果一个操作数为NULL,另一个为非NULL,则is运算符的计算结果为0(false),而is not运算符的计算结果为1(true)。is或is not表达式的计算结果不可能为NULL。运算符的优先级与=

因此,您应该拥有并将等同于您拥有的是:

@Dao
interface DogDao {
    @Query("SELECT * FROM dogs WHERE breed IS :breed")
    fun getByBreed(breed: String?): List<Dog>
}
@Dao
接口道{
@查询(“从品种为:品种的狗中选择*)
有趣的GetBybride(品种:字符串?):列表
}

谢谢,这正是我想要的。