如何在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功能。哈奇,但还能做什么呢