2014-01-12 3 views
0

Я хочу запросить таблицу в моей SQLiteDatabase на Android, где одно из полей находится в списке целых чисел. Есть ли способ использовать функцию запроса для этого? Я пробовал следующий код без везения, когда generatePlayerIdList (игроки) возвращает разделенный запятыми список идентификаторов игроков (например, «0, 1, 2»).Запрос по списку целых чисел в SQLiteDatabase на Android

readableDatabase.query(
      "player_position", 
      new String[]{"id", "player_id", "turn_number", "position"}, 
      "player_id IN (?)", 
      new String[]{generatePlayerIdList(players)}, 
      null, 
      null, 
      null); 

мне удалось получить запрос для работы со следующим кодом, но это некрасиво, когда я вытягивать в именах таблиц и столбцов из других файлов (не показан здесь ради понятности) за счетом количества конкатенация строк.

readableDatabase.rawQuery(
      "SELECT id, player_id, turn_number, position " + 
        "FROM player_position " + 
        "WHERE player_id IN(" + generatePlayerIdList(players) + ")", 
      null); 
+1

Что конкатенации вы ссылаетесь? Я имею в виду, с моей точки зрения, второе предложение вашего должно быть лучше по сравнению с первым. –

+0

Следуя рекомендациям здесь http://developer.android.com/training/basics/data-storage/databases.html#DefineContract Последний запрос выглядит примерно так: "SELECT" + PlayerPosition.ID + "," + PlayerPosition .PLAYER_ID + "," + PlayerPosition.TURN_NUMBER + ... Использование этих констант намного лучше, используя метод запроса. – kentsurrey

+0

Связывание SQLite может выполняться только с помощью литералов, а не для предоставления списка параметров. Если вы не хотите иметь запятые параметры вопросительного знака, которые будут включать гораздо больше конкатенации без каких-либо преимуществ, вы должны остаться с вашим текущим решением. Вы можете использовать форматирование строк, если хотите сохранить его более чистым. – corsair992

ответ

0

В API Android базы данных, параметры (?) полезны только для передачи значения строки в базу данных.

Самый простой способ обработки нескольких номеров он, чтобы вставить их непосредственно в строку:

db.query("player_position", 
     new String[]{"id", "player_id", "turn_number", "position"}, 
     "player_id IN (" + generatePlayerIdList(players) + ")", 
     null, null, null, null); 
+0

Спасибо, это намного чище, чем мое решение orignal. – kentsurrey

Смежные вопросы