2011-08-10 16 views
10

コンテンツプロバイダにIN句を使用することはできますか?AndroidコンテンツプロバイダのクエリIN句

私は(?)を削除し、ちょうど私がエラーを取得する?を使用している場合、私は現在

cursor = contentResolver.query(CONTENT_URI, PROJECTION, "field IN (?)", new String[] { argsBuilder.toString() }, null); 

を使用しています。

私のカーソルは0カウントです。

私が手動で入力し、sqlite3でクエリを実行すると動作します。

ヘルプ? IN演算子を使用する場合

答えて

21

、あなたはあなたのselectionArgs配列に提供引数ごとにカンマで区切られた1つ?を持っている必要があります。例えば:

String[] selectionArgs = {"red", "black"}; 
String selection = "color IN (?, ?)"; 

次ピック右カウント数と適切args

int argcount = 2; // number of IN arguments 
String[] args = new String[]{ 1, 2 }; 
StringBuilder inList = new StringBuilder(argcount * 2); 
for (int i = 0; i < argcount; i++) { 
    if(i > 0) { 
     inList.append(","); 
    } 
    inList.append("?"); 
} 
cursor = contentResolver.query(
    CONTENT_URI, 
    PROJECTION, 
    "field IN (" + inList.toString() + ")", 
    args, 
    null); 
+0

ありがとう! INがサポートされているかどうかを知りたかったのです。 – dnkoutso

+0

これは私のために働いていません。私は0カウントのカーソルを取得しています。 –

+0

geniousのすべては簡単です。ありがとうございました、 – RexSplode

1

あなたの引数が数値のみである場合は、これも同様に動作します

Iterable args = ...; // any array, list, set, ... 
cursor = contentResolver.query(CONTENT_URI, PROJECTION, "field IN (" + TextUtils.join(",", args) + ")", null, null);