Android 我的问题出了什么问题

Android 我的问题出了什么问题,android,sqlite,Android,Sqlite,我正在尝试使用CursorLoader查询数据库 这是从加载程序中生成的查询 11-2417:33:21.507:E/ACRA32418:由以下原因引起: android.database.sqlite.SQLiteException:near:语法错误代码 1:,编译时:选择_id、联系人id、照片uri、数据1, 从视图中查找数据,其中1和mimetype=?或mimetype=? 和data1相似?%按查找顺序排列 我看不到附近有什么问题? -这就是为什么我的查询参数看起来像 Uri AU

我正在尝试使用CursorLoader查询数据库

这是从加载程序中生成的查询

11-2417:33:21.507:E/ACRA32418:由以下原因引起: android.database.sqlite.SQLiteException:near:语法错误代码 1:,编译时:选择_id、联系人id、照片uri、数据1, 从视图中查找数据,其中1和mimetype=?或mimetype=? 和data1相似?%按查找顺序排列

我看不到附近有什么问题? -这就是为什么我的查询参数看起来像

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);
}

您的LIKE模式没有使用正确的SQL语法

%必须在字符串内,即在引号内,但?必须在外部,因此必须连接它们:

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

从view_data check来看,应该只有表名,而不需要尝试代码,我会说,问题在于查询的相似部分—您应该在相似部分的右侧有。示例data1类似于“?%”。你试过了吗?@Arju绝对不需要,但是FROM是正确的:你可以使用。另外,正如上面的一位评论员所指出的,FROM子句的格式不正确。@EricTobias绝对不需要,但是FROM是正确的:你可以使用。事实上,这是正确的,我需要执行query+%才能使用它work@LS_dev虽然你是对的,语法也被接受,我认为,按照ISO规范,这是正确的。我引用:AS子句是ISO标准中定义的语法,用于为结果集列指定名称。这是在SQLServer2005中使用的首选语法。从…起虽然我知道它们指的是SELECT而不是FROM语句,但我认为一致性是关键,编写良好的代码比语法捷径更重要@埃里克托比亚斯本人总是使用AS来增强易读性。然而,应用的格式不正确是不正确的,因为使用的语法是绝对合法的。