Каков наилучший способ формирования запросов SQL в Android? - PullRequest
2 голосов
/ 08 февраля 2011

У меня есть база данных с пятью таблицами в приложении для Android. Я занимался серфингом в поисках способа поставить условия в запросе (WHERE, &&, OR).

Мои запросы в форме:

public Cursor getAlternative(int questionid) {
    Cursor cursor =  mDb.query(DBTABLE_ALTERNATIVE, new String[] { KEY_ALT }, KEY_QID + "=" + questionid, null, null, null, null, null);                
    return cursor;
}

Но я обнаружил, что многие люди пишут свои запросы с помощью обычного SQL, например:

Cursor c = myDB.query("SELECT FirstName,Age" +
                     " FROM " + MY_DATABASE_TABLE
                     + " WHERE Age > 10 LIMIT 7;",
                     null);

Какой самый эффективный способ? Мне кажется, проще формировать регулярные операторы SQL, но после прочтения учебников на сайте Android Dev я начал формировать запросы, как указано выше.

Вопрос 2: если я использую первый способ, как я могу использовать два условия? Скажем, у меня есть два параметра, questionid и categoryid, как мне добавить следующий KEY_CID + "=" + categoryid?

Я пробовал с && и AND, но, похоже, ни один из них не работает. Благодарю.

Ответы [ 2 ]

1 голос
/ 08 февраля 2011

Я не уверен, имеют ли место простые последствия для String и StringBuffers (StringBuilder был бы даже лучше), поскольку движку SQL также необходимо снова проанализировать эту строку запроса.Преимущество метода db.query () заключается в том, что некоторые части запроса могут быть сохранены предварительно проанализированным способом (например, «PreparedStatement»).Особенно если параметры помещаются не в строку, а в качестве заполнителей

Например, where KEY_QID=? AND KEY_CATID=?

Здесь базовый запрос "остается постоянным", и система может оптимизировать.

1 голос
/ 08 февраля 2011

Какой самый эффективный способ?

Это зависит ... но, вообще говоря, второй путь будет быстрее. Зачем? потому что ему не нужно будет строить строку запроса, используя параметры, которые принимает метод запроса.

Однако я бы предпочел использовать первый способ, поскольку он менее подвержен ошибкам.

Вопрос 2. Если я использую первый способ, как я могу использовать два условия?

Это должно работать следующим образом:

KEY_QID + "=" + questionid + " AND " +KEY_CATID + "=" + categoryid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...