sqlite.SQLiteException:没有这样的列:data1(Sqlite代码1):

时间:2017-09-24 23:10:10

标签: android sql sqlite

我已经在互联网上搜索了这个问题,但无法得到任何有效的回复。 我相信它来自选择,但我不知道它有什么问题。

我收到此错误:
        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);

我将不胜感激。

2 个答案:

答案 0 :(得分:1)

根据您的错误,您要查询的URI中没有这样的列greaterdata1中包含的ContactsContract.CommonDataKinds.Phone.NUMBER列应该导致异常。 您可能想要查询来自the overview from the ContactsContract

中所述selection的ContactsContract的其他表格
  

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

答案 1 :(得分:0)

更改您的查询URI。

您使用的URI不是用于搜索/过滤联系人,也无权访问这些列:

Uri uri = ContactsContract.Contacts.CONTENT_URI;

您需要使用可以访问您要尝试过滤的列的URI,如下所示:

Uri uri = ContactsContract.Data.CONTENT_URI;

Android SDK Documentation

上使用哪些URI以及何时进行了大量细分
  
      
  • 如果您需要阅读单个联系人,请考虑使用CONTENT_LOOKUP_URI而不是CONTENT_URI。

  •   
  • 如果您需要通过电话号码查找联系人,请使用针对此目的进行优化的PhoneLookup.CONTENT_FILTER_URI。

  •   
  • 如果您需要按部分名称查找联系人,例如要生成按类型过滤的建议,请使用CONTENT_FILTER_URI URI。

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

  •