sqlite.sqliteException:no这样的列:data1(sqlite代码1):



我已经搜索了Internet的此问题,但无法得到任何工作响应。我相信这是从选择中来的,但我不知道有什么问题。

我得到了这个错误:
android.database.sqlite.SQLiteException: no such column: data1 (Sqlite code 1): , while compiling: SELECT sort_key, photo_uri ...

执行此代码以检索电话联系人:

    Uri uri = ContactsContract.Contacts.CONTENT_URI;
    String no07 = "%07";
    String no407 = "%+407";
    String selection = "((" + ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY + " NOTNULL) AND ("
            + ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1) AND ("
            + ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME_PRIMARY + " != '' ) AND (("
            + ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE '" + no07 + "' ) OR ("
            + ContactsContract.CommonDataKinds.Phone.NUMBER + " LIKE '" + no407 + "' )))";
    Cursor phones = getActivity()
            .getContentResolver()
            .query(uri, null, selection, null, null);

我将感谢任何帮助。

根据您的错误,您正在查询URI中没有这样的列data1selection中包含的ContactsContract.CommonDataKinds.Phone.NUMBER列应导致例外。您可能需要查询与CContactsContract.Data的COC_5的不同表

contactscontract.data表中的一行可以存储任何类型的个人数据,例如电话号码或电子邮件地址。

更改查询uri。

您正在使用不用于搜索/过滤联系人的URI,并且无法访问这些列:

Uri uri = ContactsContract.Contacts.CONTENT_URI;

您需要使用可以访问要过滤的列的URI,例如:

Uri uri = ContactsContract.Data.CONTENT_URI;

在Android SDK文档上使用的uris有一个不错的细分:

  • 如果您需要阅读单独的联系人,请考虑使用content_lookup_uri而不是content_uri。

  • 如果您需要通过电话号码查找联系人,请使用phonelookup.content_filter_uri,该联系人已为此目的进行了优化。

  • 如果您需要按部分名称查找联系人,例如要产生滤波器 - 您型建议,请使用content_filter_uri uri。

  • 如果您需要通过某些数据元素(例如电子邮件地址,昵称等)查找联系人,请针对ContactScontract.data表使用查询。结果将包含联系ID,名称等。

最新更新