2011-08-10 43 views
10

是否可以使用IN子句作为内容提供者?Android内容提供者查询IN子句

我目前使用

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

如果我删除(?),只是使用?我得到一个错误。

我在我的光标中获得0个数。

如果我手动键入并在sqlite3中执行查询它的作品。

帮助?

回答

21

当使用IN运算符时,需要在selectionArgs阵列中为每个参数提供一个用逗号分隔的?。例如: -

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

一切都很简单。谢谢, – RexSplode

1

如果你的论点是唯一的编号,这个工程还有:

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