首页 > 解决方案 > Android:SQLite 无法在索引处绑定参数,因为索引超出范围

问题描述

我正在使用 SQLite 数据库来存储项目。当我使用 where 子句和选择参数通过它们的 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,它可以正常工作。不知道为什么。

标签: javaandroidsqlitekotlin

解决方案


选择参数的数量必须与?'s(占位符)的数量相匹配。所以错误基本上是说我把第二个参数放在哪里,因为我已经替换了第一个?(占位符)

它在只有 1 个数组元素时起作用,因为只有 1 个?(占位符)。

也许你想要:-

MenuContract.ItemEntry._ID + "=? OR " + MenuContract.ItemEntry._ID + "=?",

然后两个参数都有一个占位符。


推荐阅读