閉じる

android.database.sqlite.SQLiteException: bind or column index out of range: handle XXXX

以下のようなクエリを実行すると発生する。

SQLiteDatabase.rawQuery(“select XX from YY where ZZ like ?”,new String[]{“%hoge%”}});

どうも、SQLiteDatabase.rawQueryの第二引数(selectionArgs)を解釈するコードがおかしいらしく、うまく動かない。
以下のように書く必要があるらしい。

SQLiteDatabase.rawQuery(“select XX from YY where a like ‘%’ || ?1 || ‘%'”,new String[]{“hoge”}});

selectionArgsに指定した数と ?の数が合わなくてもエラーになるようで*1 、selectionArgsを動的に組み上げるのでなければ評価したときに真になるように ?を含む式をでっち上げる必要があるみたい。
この記事はバッドノウハウな気がしないでもない。


*1 エラーメッセージの意味を考えると、%を入れることでどういう訳かカウントがおかしくなって~という事なんだろうな。

コメントを残す

メールアドレスが公開されることはありません。必須項目には印がついています *

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)