ContentResolver.queryメソッドの第3に?を使っておくと、第4引数で展開出来る
android.content.ContentResolver.queryメソッドの各引数は、それぞれSQLのSELECT句や、FROM句に対応している。
第3引数はWHERE句にあたるが、中に?を埋め込んでおくと第4引数で展開することが出来る。
queryの参考文献などはこちらがいいんじゃないでしょうか。
ContentResolverで画像を読み込む | Android Techfirm Lab
公式 API Document
サンプル
サンプルとしてAndroid備え付けのContentStoreからMP3のファイル名で情報を引いてくる例をあげる。
まずは単純に埋め込む例。
Cursor cursor = resolver.query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI , new String[]{ MediaStore.Audio.Media.DISPLAY_NAME }, // keys for select. null means all "_display_name='"+f.getName()+"'" , null, null );
これでもうまく行くような気はするが、f.getNameの戻り値をエスケープしたりしなければいけないし、場合によってはシングルクォートで囲わなくても良かったりして、めんどくさい。
そこで以下のように?埋込+第4引数を使う。
Cursor cursor = resolver.query( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI , new String[]{ MediaStore.Audio.Media.DISPLAY_NAME }, // keys for select. null means all "_display_name=?" , new String[]{ f.getName() }, null );
?を埋め込む場合は引用符など気にしなくていいし、エスケープも勝手にやってくれて楽で安全。
まとめ
queryメソッドの?埋込を使って安心クエリ生成。
っていうか?使わないとインジェクションされんぞ!!!