代码之家  ›  专栏  ›  技术社区  ›  Badr Bujbara

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

  •  0
  • Badr Bujbara  · 技术社区  · 7 年前

    我正在使用sqlite数据库来存储项目。当我使用where子句和selection参数按其id调用项时。如果传递具有多个项ID的选择参数数组,则该数组将崩溃,并出现错误:

    无法在索引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 回复  |  直到 7 年前
        1
  •  1
  •   MikeT    7 年前

    选择参数的数目必须与 ? 的(占位符)。所以错误基本上是说 我把第二个论点放在哪里,因为我已经取代了第一个论点 ? (占位符)

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

    也许你想要:

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

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