What is wrong with my query

删除回忆录丶 提交于 2020-01-16 14:54:19

问题


I am trying to query the database using CursorLoader

this is the query that comes out from the loader

11-24 17:33:21.507: E/ACRA(32418): Caused by: android.database.sqlite.SQLiteException: near ")": syntax error (code 1): , while compiling: SELECT _id, contact_id, photo_uri, data1, lookup FROM view_data data WHERE (1) AND (( (mimetype=? OR mimetype=?) AND data1 like ?%)) ORDER BY lookup

what is wrong near ")" that i don't see ? - this is why my query arguments look like

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:


Your LIKE pattern does not use correct SQL syntax.

The % must be inside a string (i.e., inside quotes), but the ? must be outside, so you have to concatenate them:

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


来源:https://stackoverflow.com/questions/20176467/what-is-wrong-with-my-query

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!