2011-03-29 3 views
1

Уважаемого Stack Overflow сообщества,запроса Android SQL с помощью ИНЕК

У меня есть вопрос о том, как включить ИНЕК при запросе базы данных SQL в Android. Моя цель - вернуть определенные записи из моей базы данных where the date picked by a datepicker matches the date stored.

Вот мой код:

private static String datePickerDate = "3/29/2011"; 
private static String[] FROM = { _ID, NAME, PRICE, DATE, TIME }; 
private static String ORDER_BY = TIME + " DESC "; 
private static String WHERE = DATE + "is like " + datePickerDate; 
private Cursor getEvents(){ 
    // Perform a managed Query. The Activity will handle closing 
    // and re-querying the cursor when needed 
    SQLiteDatabase db = events.getReadableDatabase(); 
    Cursor cursor = db.query(TABLE_NAME, FROM, null, null, null, null, ORDER_BY); 
    startManagingCursor(cursor); 
    return cursor; 
} 

Мои вопросы таковы: Где мой "ГДЕ" заявление идти?

И верно ли мое утверждение «WHERE»?

Документация, которую я нашел для db.query, не указывает, может ли использоваться предложение WHERE, оно просто указывает, что предложение «HAVING» возможно, но я не совсем думаю, что это то, что я желая.

db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy) 
+1

вы можете изменить ' " как "' в '", как"' (обратите внимание на пробел перед '' is' – FrustratedWithFormsDesigner

ответ

4

selection представляет свой ИНЕК.

От выбора doc

фильтра, который объявляющий возвращаемых строк, отформатированный как SQL ИНЕК (исключая сама WHERE ). Передача null вернет все строки для данной таблицы.

Таким образом, вы можете попробовать это (непроверенные):

private static String WHERE = "DATE like ?"; 
db.query(table, columns, WHERE , new String[] { datePickerDate }, groupBy, having, orderBy) 
+0

Спасибо! Это было именно то, что мне нужно! – Jevarlo

+0

@ccheneson Я также сталкиваюсь с аналогичной проблемой. Вот мой вопрос http://stackoverflow.com/questions/11806818/how-to-use-query-for-multiple-selection-argument-using-one-selection-column – moDev

3

Если вы хотите использовать предложение WHERE, я предложил бы использовать необработанную функцию запроса в классе SQLiteDatabase, показано here.

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

EDIT: На стороне записки, параметр «Выбор» функции запроса() соответствует ИНЕКЕ, как было отмечено here

+3

. rawQuery() 'должен использоваться только тогда, когда он действительно необходим.' query() 'всегда должен использоваться для обычных запросов выбора. – WarrenFaith

+0

из любопытства, почему? Я использую много сырых запросов в своих приложениях, и это упрощает его для меня. Я не сомневаюсь, мне просто интересно. –

+2

Я начал писать о производительности и тому подобное, но после погружения в источник (смотри 2.3.1 r1), я должен сказать, они используют те же методы на конец (несмотря на t он сам создает SQL-запрос, когда используется 'query()'), поэтому, наконец ... Я должен признать: если вы знаете SQL, используйте 'rawQuery()' ... спасибо за то, что вы любопытны, вы были правы :) – WarrenFaith

0

О, где ты «где» идет - смотрите here

а что касается второй части, я думаю, что вы пропустите qouts до и после значения, оно должно быть .. like '3/29/2011' и не .. is like 3/29/2011

+0

Спасибо за ответ! И спасибо за исправление! – Jevarlo

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