2011-01-21 9 views
8

私はクエリメソッドを使用していますが、クエリメソッドに複数の選択引数を渡す方法はありません。"query"メソッドで2つ以上の選択引数を渡す方法

私のクエリメソッドは、このSQL文と同じように、結果を返す必要があります:

 
SELECT _id FROM CONATCT_TAGS WHERE TAG1='tagname' OR 
            TAG2='tagname' OR 
            TAG3='tagname' OR 
            TAG4='tagname' OR 
            TAG5='tagname'; 

答えて

9

はそのような何かを試してみてください。..

SQLiteDatabase db = YourDatabaseHelper.getReadableDatabase(); 
String TABLE = "CONTACT_TAGS"; 
String[] FIELDS = { "_id" }; 
String WHERE = "TAG1='tagname' OR TAG2='tagname' OR TAG3='tagname' OR TAG4='tagname' OR TAG5='tagname' "; 
// Execute 
cursor = db.query(TABLE, FIELDS, WHERE, null, null, null, null); 

あなたがCursor.query()メソッドのドキュメントを読む場合は、定義を見つけますselectionの場合:

選択:フィルタ宣言どの行を返すかは、 SQL WHERE句で指定します(WHERE自体は除きます)。 nullを渡すと、指定されたテーブルのすべての行が返されます。 あなたは、Android SQLiteの接続で内蔵の最適化を使用する場合

45

あなたは、この代わりのような何かができる:

String table = "CONTACT_TAGS"; 
String[] columns = {"_id"}; 
String where = "TAG1=? OR TAG2=? OR TAG3=? OR TAG4=? OR TAG5=?"; 
String[] args = {"tagname", "tagname", "tagname", "tagname", "tagname"}; 

SQLiteDatabase db = myDatabaseHelper.getReadableDatabase(); 
Cursor cursor = db.query(table, columns, where, args, null, null, null); 

@ raultumのソリューションとの違いは、データベースコネクタが決めさせていることです提出されたデータをどのように解釈するか。これは、セキュリティの観点からは非常に興味深いものです。

+2

SQLインジェクションを避けるために 'args'引数を適切に使用しているので、この解決策を使用したいと思っています – philipp

+2

誰もこれまで働いたことがありますか?私がそれを試してみると '?'すべてのフィールドのために私のargsに下塗りの代わりに。 – schwiz

2

あなたはその

文字列strSelection = android.provider.CallLog.Calls.TYPE + "=" + CallLog.Calls.MISSED_TYPE + "OR" + android.provider.CallLog.Calls.TYPE +のようにそれを使用することができます"=" + CallLog.Calls.INCOMING_TYPE;

関連する問題