2015-03-10 3 views
1

я ответил на вопрос переполнения стека, и пользователь, который задал вопрос меня спрашивают:
SQlite Query in android using cursorПочему selectionArgs должен быть массивом String?

почему я должен дать моему selectionArgs массив вместо св одно значения?

Я не думал об этом раньше и его вопрос тоже сейчас. Мы должны использовать массив, когда у нас есть только одно значение для selectionArgs в запросе БД?
(Я надеюсь, что я прав на свой вопрос в нужном месте)

+2

потому что при определении метода вы можете передавать аргументы в виде строкового или строкового массива, когда аргументы выбора имеют несколько значений, тогда обработка строки может быть затруднена, но строковый массив может содержать одиночные значения, если есть только на selectargs и несколько значений, если есть more –

+0

Тогда мы не могли использовать одно значение String без массива? –

+0

его просто выбор дизайна –

ответ

1

Вот relevant documentation. В принципе, String[] selectionArgs - это массив, поэтому у вас может быть один или несколько аргументов для вашего предложения sql WHERE. Поскольку эти параметры используются в методе database.query(), они фактически создают строчную строку запроса sql, которая будет запускаться SQLite. В параметре String selection необходимо указать все имена столбцов ИНЕК, как это:

String selection = "DefaultId =? OR Name=?";

Для каждого ? в selection, соответствующее WHERE значения подставляются из вашего selectionArgs массива. Таким образом, вы должны иметь что-то вроде этого:

String[] selectionArgs = new String[]{"567", "Bob"};

В database.query() метод Перебирает selectionArgs для каждого ? он находит в selection. Таким образом, размер массива должен соответствовать числу ? заполнителей, которые вы используете в selection. (Если есть более ? чем selectionArgs значения, то я считаю, null получает подставив вместо. Я не проверял это, хотя.)

Так в основном, так как это возможно, чтобы иметь несколько WHERE значения подставляются в selection, поэтому selectionArgs является массив вместо простой строки.

+0

спасибо за ваш ответ :) Мой вопрос в том, когда у нас есть только одно '?' И одно значение для него, почему мы должны передать массив для него, а не только строку! Я думаю, что массив String занимает больше места в памяти вместо строкового значения. я надеюсь, что это ясно.) –

+1

Кто бы ни разработал этот класс, должен был решить, что чаще всего несколько аргументов, если вы используете подстановки. Если у вас нет нескольких значений, вам может быть больше смысла избегать использования '?' В целом и разместить ваши значения непосредственно в выборе строки (например, 'String selection =" DefaultId = 567 "'. Если вы сделаете это, просто предоставить пустой массив для значений, например: 'String selectionArgs [] = new String [] {}' – hungryghost