Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android sqlite.SQLiteException:没有这样的列:data1(sqlite代码1):_Android_Sql_Sqlite - Fatal编程技术网

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

Android sqlite.SQLiteException:没有这样的列:data1(sqlite代码1):,android,sql,sqlite,Android,Sql,Sqlite,我在互联网上搜索了这个问题,但没有得到任何有效的回复。 我相信这是从选择,但我不知道有什么问题 我得到这个错误: android.database.sqlite.SQLiteException:没有这样的列:data1(sqlite代码1):,编译时:选择sort\u key,photo\u uri… 执行此代码检索电话联系人后: Uri uri = ContactsContract.Contacts.CONTENT_URI; String no07 = "%07"; S

我在互联网上搜索了这个问题,但没有得到任何有效的回复。 我相信这是从选择,但我不知道有什么问题

我得到这个错误:
android.database.sqlite.SQLiteException:没有这样的列:data1(sqlite代码1):,编译时:选择sort\u key,photo\u 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中没有这样的列
data1
。您的
选择中包含的
联系人contract.commonDataTypes.Phone.NUMBER
列应该是导致异常的原因。 您可能希望查询与ContactsContract不同的表,该表为
ContactsContract.Data
,如中所述

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

更改查询URI。 您使用的URI不用于搜索/筛选联系人,并且无权访问这些列:

Uri uri = ContactsContract.Contacts.CONTENT_URI;
您需要使用一个URI,该URI可以访问您试图筛选的列,如下所示:

Uri uri = ContactsContract.Data.CONTENT_URI;
有一个关于使用什么URI以及何时使用URI的详细分类:

    >P>如果您需要读取单独的联系人,请考虑使用CordeToLoopUpURI代替Cordunthuri。

  • 如果需要通过电话号码查找联系人,请使用PhoneLookup.CONTENT\u FILTER\u URI,该URI为此目的进行了优化

  • 如果您需要按部分名称查找联系人,例如在键入建议时生成筛选器,请使用内容筛选器URI

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


尝试调试/记录整个select语句。我猜您正在进行的列选择在被查询的表中不存在。我只是在添加了LIKE行之后才遇到这个问题如果您真的需要LIKE行,那就可以了。但是如果您将整个select语句记录下来,这将非常有帮助。然后,您可以在DB服务器上手动运行select语句,然后您将看到错误所在。编辑您的问题并发布select语句日志。恐怕我真的不知道如何在DB上手动记录和运行select语句将帮助您进行调试。