我正在使用SQLite数据库存储项目。当我使用where子句和selection args通过其ID调用项目时。如果我传递带有多个项目ID的选择args数组,则会崩溃并显示错误:
由于索引超出范围,因此无法在索引2处绑定参数。该语句有1个参数。
这是我执行查询的方式:
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
)
}
如果selectionArgs数组仅包含一个id,它将很好地工作。不知道为什么。
答案 0 :(得分:1)
选择参数的数量必须与 ?
的数量(占位符)匹配。所以错误基本上是说在我已经替换掉第一个 ?
(占位符)
当只有1个数组元素时有效,因为只有1个 ?
(占位符)。
也许你想要:-
MenuContract.ItemEntry._ID + "=? OR " + MenuContract.ItemEntry._ID + "=?",
然后这两个参数都有一个占位符。