有什么不对我的查询 [英] What is wrong with my query
问题描述
我想查询使用CursorLoader数据库
这是从装载机出来的查询
17 11-24:33:21.507:E / ACRA(32418):产生的原因:
android.database.sqlite.SQLiteException:近):语法错误(code
1),在编译:SELECT _id,CONTACT_ID,photo_uri,数据1,
查找FROM view_data数据,其中(1)和(((MIME类型= OR = MIME类型?)
和DATA1样?%))ORDER BY查找
块引用>什么是错的附近),我不明白吗?
- 这就是为什么我的查询参数看起来像乌里AUTO_COMPLETE_CONTACT_URI = Data.CONTENT_URI;的String [] = AUTO_COMLETE_PROJECTION {Data._ID,Data.CONTACT_ID,Data.PHOTO_URI,Data.DATA1,Data.LOOKUP_KEY};
字符串AUTO_COMPLETE_SELECTION_LIKE_QUERY = AUTO_COMPLETE_SELECTION +和+ Data.DATA1 +怎么样?公共静态的String [] getAutoCompleteQuerySelectionArgs(查询字符串){
返回新的String [] {Email.CONTENT_ITEM_TYPE,Phone.CONTENT_ITEM_TYPE,查询+%};
}/ **此方法由initLoader()调用* /
@覆盖
公共装载机<&光标GT; onCreateLoader(INT ID,捆绑数据){
开关(ID){
案例ContactsQuery.AUTO_COMPLETE_QUERY_ID:
URI URI = ContactsQuery.AUTO_COMPLETE_CONTACT_URI;
如果(数据!= NULL){
查询字符串= data.getString(ContactsQuery.AUTO_COMPLETE_QUERY);
返回新CursorLoader(getActivity()getBaseContext(),URI,ContactsQuery.AUTO_COMLETE_PROJECTION,ContactsQuery.AUTO_COMPLETE_SELECTION_LIKE_QUERY,Query.getAutoCompleteQuerySelectionArgs(查询),ContactsQuery.AUTO_COMPLETE_SORT_ORDER。);
}其他{
返回新CursorLoader(getActivity()getBaseContext(),URI,ContactsQuery.AUTO_COMLETE_PROJECTION,ContactsQuery.AUTO_COMPLETE_SELECTION,空,ContactsQuery.AUTO_COMPLETE_SORT_ORDER);
}
}
返回null;
}/ **此方法在UI线程中执行,onCreateLoader()后,* /
@覆盖
公共无效onLoadFinished(装载机<&光标GT;为arg0,光标C){
chipsCursorAdapter.swapCursor(C);
}@覆盖
公共无效onLoaderReset(装载机<&光标GT;装载机){
chipsCursorAdapter.swapCursor(NULL);
}
解决方案您LIKE模式不使用正确的SQL语法。
的
%
必须是一个字符串(例如,引号之内),但里面呢?
必须在外面,所以你必须将它们串联:... AND DATA1样? || '%'))ORDER BY ...
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); }
解决方案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 ...
这篇关于有什么不对我的查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!