Android:SQLite无法在索引处绑定参数,因为索引超出范围

时间:2019-02-22 21:04:45

标签: java android sqlite kotlin

我正在使用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,它将很好地工作。不知道为什么。

1 个答案:

答案 0 :(得分:1)

选择参数的数量必须与 ? 的数量(占位符)匹配。所以错误基本上是说在我已经替换掉第一个 ? (占位符)

的情况下,将第二个参数放在哪里?

当只有1个数组元素时有效,因为只有1个 ? (占位符)。

也许你想要:-

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

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