【发布时间】:2013-11-24 15:47:10
【问题描述】:
我正在尝试使用 CursorLoader 查询数据库
这是来自加载器的查询
11-24 17:33:21.507:E/ACRA(32418):由以下原因引起: android.database.sqlite.SQLiteException: near ")": 语法错误(代码 1): , 编译时: SELECT _id, contact_id, photo_uri, data1, 从 view_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);
}
【问题讨论】:
-
FROM view_data 数据检查应该只有表名
-
如果不尝试代码,我会说,问题在于您的
like部分查询 - 您应该在like的右侧有'.一个例子data1 like '?%'。你试过了吗? -
@Arju 完全没有必要,但
FROM是正确的:你可以使用FROM table-name table-alias。