2013-11-24 5 views
0

Я пытаюсь запрос к базе данных с помощью CursorLoaderЧто случилось с моим запросом

это запрос, который выходит из загрузчика

11-24 17: 33: 21,507: E/ACRA (32418): вызвано: android.database.sqlite.SQLiteException: near ")": синтаксическая ошибка (код 1): при компиляции: SELECT _id, contact_id, photo_uri, data1, lookup FROM view_data data WHERE (1) AND (((mimetype =? OR mimetype =?) AND data1 like?%)) ORDER BY lookup

что не так близко ")", что я не вижу? - вот почему мои аргументы запроса выглядеть

Uri AUTO_COMPLETE_CONTACT_URI = Data.CONTENT_URI; 

String[] AUTO_COMLETE_PROJECTION = {Data._ID, Data.CONTACT_ID, Data.PHOTO_URI, Data.DATA1 ,Data.LOOKUP_KEY}; 
String AUTO_COMPLETE_SELECTION_LIKE_QUERY = AUTO_COMPLETE_SELECTION + " AND " + Data.DATA1 + " like ?"; 

public static String[] getAutoCompleteQuerySelectionArgs(String query) { 
    return new String[] { Email.CONTENT_ITEM_TYPE, Phone.CONTENT_ITEM_TYPE, query+"%" }; 
} 

/** This method is invoked by initLoader() */ 
@Override 
public Loader<Cursor> onCreateLoader(int id, Bundle data) { 
    switch(id) { 
    case ContactsQuery.AUTO_COMPLETE_QUERY_ID: 
     Uri uri = ContactsQuery.AUTO_COMPLETE_CONTACT_URI; 
     if(data!=null) { 
     String query = data.getString(ContactsQuery.AUTO_COMPLETE_QUERY); 
     return new CursorLoader(getActivity().getBaseContext(), uri, ContactsQuery.AUTO_COMLETE_PROJECTION, ContactsQuery.AUTO_COMPLETE_SELECTION_LIKE_QUERY , Query.getAutoCompleteQuerySelectionArgs(query), ContactsQuery.AUTO_COMPLETE_SORT_ORDER); 
     }else { 
      return new CursorLoader(getActivity().getBaseContext(), uri, ContactsQuery.AUTO_COMLETE_PROJECTION, ContactsQuery.AUTO_COMPLETE_SELECTION , null, ContactsQuery.AUTO_COMPLETE_SORT_ORDER); 
     } 
    } 
return null; 
} 

/** This method is executed in ui thread, after onCreateLoader() */ 
@Override 
public void onLoadFinished(Loader<Cursor> arg0, Cursor c) { 
    chipsCursorAdapter.swapCursor(c);  
} 

@Override 
public void onLoaderReset(Loader<Cursor> loader) { 
    chipsCursorAdapter.swapCursor(null); 
} 
+1

ОТ view_data данных проверки должно быть только имя таблицы –

+0

Без попробовав код, я бы сказал, что проблема связана с вашей «подобной» частью запроса - вы должны иметь '' 'вокруг правой части' like'. Пример 'data1 like '?%''. Вы попробовали это? – Darwind

+0

@Arju Абсолютно необязательно, но 'FROM' верен: вы можете использовать [' FROM table-name table-alias'] (http://www.sqlite.org/syntaxdiagrams.html#single-source). –

ответ

1

Вашего LIKE шаблон не используют правильный синтаксис SQL.

% должен быть внутри строки (то есть, в кавычках), но ? должен быть снаружи, так что вы должны объединить их:

... AND data1 LIKE ? || '%')) ORDER BY ... 
+0

Кроме того, предложение from отклонено, как указано комментатором выше. – Eric

+0

@EricTobias Абсолютно ненужно, но 'FROM' верен: вы можете использовать [' FROM table-name table-alias'] (http://www.sqlite.org/syntaxdiagrams.html#single-source). –

+0

действительно это правильно, мне нужно было сделать запрос + «%», чтобы он работал –

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