> ●質問
> ①query()にて複数のプレースホルダを使用してレコードを検出することは可能でしょうか?
> 可能なようでしたら、適切な方法をご教授頂きたく存じます。
> (下記「●現在の状況」に実装方法を記載致しました)
ここでいう「複数のプレースホルダ」というのはどっちの意味でしょうか?
1.1つのSQLにプレースホルダを複数置く方法
2. 1つのプレースホルダに複数の条件を当てはめる方法
1. は可能だと思いますが、2. はできないと思います。
> ②コマンドラインにて直接SQL文を発行してレコードを取得できるか確認しようとしましたが、
> select * from member_tbl where country = ?1 and sex = ?2, (?1 =
> JPN , ?2 = MALE), (?1 = USA , ?2 = FEMALE);
> のように記述したところエラーとなってしまいました。
> SQLiteにてSELECT文に複数プレースホルダを使用する方法をご教授ください。
コマンドラインでプレースホルダを使用する方法は分かりません。
API 経由ではできますけれど。
これだと、?1 に "?1 = JPN , ?2 = MALE" が、?2 に ""?1 = USA , ?2 = FEMALE" が
設定されるので、条件に合致するレコードはないことになります。
期待した結果を得るには、
String[] seekRec = new String[]{"JPN", "MALE", "USA", "FEMALE"};
String where = "(country = ? and sex = ?) or (country = ? and sex = ?)";
でしょうが、条件の country と sex の組み合わせの数が可変で不定なら、
もうちょっと工夫がいりますね。
--
OBATA Akio / oba...@users.sourceforge.net
> いまさらですが、質問の背景としまして、
> rawQuery()をループに組み込んでコールし続けたところ
> 『Reached MAX size for compiled-sql statement cache for database.
> <中略>Please change your sql statements to use '?' for bindargs,
> instead of using actual values.』
> というエラーが返却されたため、エラー回避方法の一つとして
> 複数プレースホルダの利用を検討しております。
よくわからないのですが、「複数プレースホルダ」というか、
このループで試したときには、プレースホルダを利用してなかったということでしょうか?
query の sql はプレースホルダを使って、ループの間、文字列を固定して、
ループの中で、selectionArgs を 動的に組み立てれば、起きなさそうですけれども?
条件が場合によって変わる部分が見えないので、具体的なソースは出せませんが。
--
このメールは Google グループのグループ「日本Androidの会」の登録者に送られています。
このグループに投稿するには、android-g...@googlegroups.com にメールを送信してください。
このグループから退会するには、android-group-j...@googlegroups.com にメールを送信してください。
詳細については、http://groups.google.com/group/android-group-japan?hl=ja からこのグループにアクセスしてください。