Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/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_Sqlite_Indexing_Android Room - Fatal编程技术网

如何在Android房间中创建部分索引

如何在Android房间中创建部分索引,android,sqlite,indexing,android-room,Android,Sqlite,Indexing,Android Room,我想在State和Id列的表上创建一个名为Messages的部分索引。通常可以通过添加WHERE子句来创建索引语句,如中所述。正确的SQLite语句应该是: CREATE INDEX `index_Messages_State_Id` ON `Messages` (`State`, `Id`) WHERE State = -2 因为我目前正在使用Room作为我的ORM,所以我不知道如何使用Room语法声明部分索引 下面是我的消息表的简要说明: @Entity(tableName = "Mess

我想在
State
Id
列的表上创建一个名为
Messages
的部分索引。通常可以通过添加
WHERE
子句来创建索引语句,如中所述。正确的SQLite语句应该是:

CREATE INDEX `index_Messages_State_Id` ON `Messages` (`State`, `Id`) WHERE State = -2
因为我目前正在使用Room作为我的ORM,所以我不知道如何使用Room语法声明部分索引

下面是我的
消息
表的简要说明:

@Entity(tableName = "Messages")
public class Message implements Parcelable {
    @PrimaryKey
    @SerializedName("i")
    @ColumnInfo(name = "Id")
    private long mId;

    @SerializedName("t")
    @ColumnInfo(name = "Type")
    private byte mType;

    @SerializedName("s")
    @ColumnInfo(name = "State")
    private byte mState;

    ....
}

提前感谢。

我不认为在房间里有明确的方式来做这件事(截至2019年7月22日)

在我的团队中,我们通过在迁移中定义部分索引绕过了这个拦截器

database.execSQL("CREATE INDEX `index_Messages_State_Id` ON `Messages` (`State`, `Id`) WHERE State = -2")

注意:如果你的Android版本低于21,这可能不起作用。感谢您的回答,但是在迁移中声明部分索引似乎对新安装的用户没有帮助,因为迁移不会涉及。这一点很好。解决这个问题的方法是在应用程序启动时运行SQL语句,使用旧的Android SQLite功能。哈奇,但还能做什么呢