有什么不对我的查询 [英] What is wrong with my query

查看:162
本文介绍了有什么不对我的查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想查询使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆