2013-11-24 88 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, 查找FROM 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); 
} 
+1

FROM view_data数据检查应该只有表名 –

+0

没有尝试一下代码,我想说,问题出在你查询的“like”部分 - 你应该在'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

事实上,这是正确的,我需要查询+“%”才能正常工作 –