SQLite Где IN, за которым следует переменная String - PullRequest
1 голос
/ 31 октября 2011

У меня есть переменная строка (пользователь получает возможность установить ее через 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 ]

3 голосов
/ 31 октября 2011

Если вы хотите поместить переменную в свой параметр selection, вы можете разделить строку, используя метод разделения , а затем сформировать свой выбор как

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, окружены ' '.Однако вы можете сформировать выбор с помощью ? вместо фактических значений (например, kern IN (?, ?, ?)) и затем передать inItems через selectionArgs[]

0 голосов
/ 31 октября 2011

, просто используя конкатенацию, например

 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); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...