Я хочу запросить таблицу в моей 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);
Что конкатенации вы ссылаетесь? Я имею в виду, с моей точки зрения, второе предложение вашего должно быть лучше по сравнению с первым. –
Следуя рекомендациям здесь http://developer.android.com/training/basics/data-storage/databases.html#DefineContract Последний запрос выглядит примерно так: "SELECT" + PlayerPosition.ID + "," + PlayerPosition .PLAYER_ID + "," + PlayerPosition.TURN_NUMBER + ... Использование этих констант намного лучше, используя метод запроса. – kentsurrey
Связывание SQLite может выполняться только с помощью литералов, а не для предоставления списка параметров. Если вы не хотите иметь запятые параметры вопросительного знака, которые будут включать гораздо больше конкатенации без каких-либо преимуществ, вы должны остаться с вашим текущим решением. Вы можете использовать форматирование строк, если хотите сохранить его более чистым. – corsair992