Java Android:SQLite无法在索引处绑定参数,因为索引超出范围
我正在使用SQLite数据库来存储项目。当我使用where子句和selection参数通过项目ID调用项目时。如果我传递了一个包含多个项目id的选择参数数组,它将崩溃并出现错误: 无法在索引2处绑定参数,因为该索引超出范围。该语句有1个参数 以下是我执行查询的方式:Java Android:SQLite无法在索引处绑定参数,因为索引超出范围,java,android,sqlite,kotlin,Java,Android,Sqlite,Kotlin,我正在使用SQLite数据库来存储项目。当我使用where子句和selection参数通过项目ID调用项目时。如果我传递了一个包含多个项目id的选择参数数组,它将崩溃并出现错误: 无法在索引2处绑定参数,因为该索引超出范围。该语句有1个参数 以下是我执行查询的方式: override fun onCreateLoader(id: Int, args: Bundle?): Loader<Cursor> { loaderId = id val selectio
override fun onCreateLoader(id: Int, args: Bundle?): Loader<Cursor> {
loaderId = id
val selectionArgs = arrayOf("2", "1")
return CursorLoader(activity!!,
MenuContract.ItemEntry.CONTENT_URI,
Constants.ITEM_PROJECTION_COLUMNS,
MenuContract.ItemEntry._ID + "=?",
selectionArgs,
null
)
}
override-fun-onCreateLoader(id:Int,args:Bundle?):Loader{
loaderId=id
val selectionArgs=arrayOf(“2”、“1”)
返回游标装入器(活动!!,
MenuContract.ItemEntry.CONTENT\u URI,
常量.ITEM\u投影\u列,
MenuContract.ItemEntry.\u ID+“=?”,
精选,
无效的
)
}
如果SelectionArray仅包含一个id,则可以正常工作。不确定原因。选择参数的数量必须与
?
的数量(占位符)匹配。所以错误基本上是说,我应该把第二个参数放在哪里,因为我已经替换了第一个?
(占位符)
它在只有1个数组元素时工作,因为只有1个?
(占位符)
也许你想要:-
MenuContract.ItemEntry._ID + "=? OR " + MenuContract.ItemEntry._ID + "=?",
然后两个参数都有一个占位符。谢谢你的帮助!在我的例子中,用户可以将项目添加到收藏夹中,我将添加项目的ID存储在prefs中,因此当收藏夹屏幕打开时,它会根据这些ID获取项目。现在,我想,我需要根据项目的数量形成选择字符串。此选择部分不直观。