SQLite其中IN后跟变量String

时间:2011-10-31 12:56:20

标签: android string sqlite

我有变量字符串(用户可以通过带有复选框的ListView设置它,因此字符串可以包含任意数量的水果)

    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 \”)部分。

我该怎么做?

谢谢!

2 个答案:

答案 0 :(得分: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();

但是,如果您希望在?中使用selection并将其替换为selectionArgs[],则似乎是不可能的,因为selectionArgs中传递的值被{{1}包围}。但是,您可以使用' '而非实际值(例如?)进行选择,然后通过kern IN (?, ?, ?)

传递inItems

答案 1 :(得分:0)

只使用像

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

for unknow no of vars

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);