2011-10-31 37 views
1

我有可变的字符串(用户得到通过与tickboxes一个ListView设置它,这样字符串可以包含任意数量的水果)的SQLite凡在后面变量字符串

private static final String kernset = "Banana, Peach" 

我有以下的SQLite查询

  Cursor cursor = db.query (TABLE_NAME, new String[] { 
     WOORD }, 
     "kern IN (\"Banana\", \"Apple\")", null, null, null, null, null); 

我想用变量替换查询的(\“Banana \”,\“Apple \”)部分。

我该怎么做?

谢谢!

回答

3

如果你想给一个变量放入您selection参数,你可以使用split method分割你的字符串,然后形成您的选择,如

StringBuilder sb = new StringBuilder(); 
sb.append("kern IN ("); 
String[] inItems = kernset.split("\\,\\s+"); 

for (int i=0; i < inItems.length; i++){ 
    if (i > 0) 
     sb.append(", "); 
    sb.append("'" + inItems[i] + "'"); 
} 
sb.append(")"); 
String selection = sb.toString(); 

但是如果y ou希望在selection中使用?并将其替换为selectionArgs[],因为selectionArgs中传递的值包含在' '中,所以它似乎不可行。但是,您可以选择?而不是实际值(如kern IN (?, ?, ?)),然后通过通过selectionArgs[]

+0

谢谢!从来没有想到这一点我自己..我不得不添加'sb.append(“)”);'得到关闭')'。电流(工作)代码: '\t \t对(INT I = 0;我 0) \t \t sb.append( “”); \t \t sb.append(“'”+ inItems [i] +“'”); \t \t} \t \t sb.append(“)”); \t \t String selection = sb.toString();' - 请编辑您的解决方案添加),所以我可以标记它是正确的。谢谢! –

+0

没问题=)对不起,我错过了那一行,而复制代码 – Vladimir

+0

谢谢!标明它是正确的。 –

0

只要使用级联像

Cursor cursor = db.query (TABLE_NAME, new String[] { 
    WOORD }, 
    "kern IN (\""+var1+"\", \""+var2+"\")", null, null, null, null, null); 

为不明无瓦尔

inString=""; 
    for(int i=0;i<fruits.length();i++) 
    { 
     inString=inString+"\""+fruits[i]+"\""; 
     if(i<(fruits.length()-1)) 
     { 
     inString=inString+", " 
     } 
    } 


     Cursor cursor = db.query (TABLE_NAME, new String[] { WOORD }, 
      "kern IN ("+inString+")", null, null, null, null, null); 
+0

对于未知的变量,我得到错误,在第7行缺少';',inString无法解析为变量,表达式的类型必须是Array,但解析为String .. –

+0

然后就放了;在行后像inString = inString +“,”; – 2011-10-31 14:02:54