最近,有需要要查询android 1.6联系人的数据库,而且需要将查询出来的联系人排好顺序。按照ContentResolver的query函数的文档,它的原型为:

query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)

第二个参数为返回结果的列数,第三、四个参数对应SQL语句中的where后面的部分,最后一个参数是SQL语句中的order by后面的部分。

第三、四个参数可以用来模糊查询,比如下面的用法:

query(People.CONTENT_URI, null, People.NAME + " LIKE ?", new String[] { "%M%" },
People.NAME + " collate NOCASE DESC");
这句话等价于SQL语句的:
select * from people where name like '%M%' order by name collate NOCASE desc;

这句话的意思是查询数据表为people的name字段中包含M的联系人。

由于,query是android对select语句的封装,应此可以将name like放在第三个参数中,带单引号的值放在第四个参数中,当然,也可以将第三个参数改为People.NAME + “ LIKE ‘%M%'",而第四个参数则为null,也即如下的形式:

query(People.CONTENT_URI, null, People.NAME + " LIKE '%M%'", null,
People.NAME + " collate NOCASE DESC");

很明显,第四个参数用来表示第三个参数的?号部分,而且是可以省略单引号的。

让我们来看一下第五个参数,由于name列在数据库中collate属性被定义为LOCALIZED。因此,参照sqlite的文档,需要加collate说明(http://www.sqlite.org/datatype3.html,6.0节),具体可参考如下说明:

When SQLite compares two strings, it uses a collating sequence or collating function (two words for the same thing) to determine which string is greater or if the two strings are equal. SQLite has three built-in collating functions: BINARY, NOCASE, and RTRIM.

BINARY - Compares string data using memcmp(), regardless of text encoding.
      NOCASE - The same as binary, except the 26 upper case characters of ASCII are folded to their lower case equivalents before the comparison is performed. Note that only ASCII characters are case folded. SQLite does not attempt to do full UTF case folding due to the size of the tables required.
      RTRIM - The same as binary, except that trailing space characters are ignored.

也就是说,它是用来指定排序规则,若不指定,sqlite expert中执行时会报错。但是,由于android的封装,第5个参数的collate部分可以省略(估计android默认替你选了一个)。

android 联系人查询结果的排序问题相关推荐

  1. android 号码查联系人,Android联系人查询

    我在查询电话簿联系人时遇到问题.我需要做的是获取同时输入电话和电子邮件或特定类型的联系人列表. 基本上是这样的: public static final String SELECTION = &quo ...

  2. android contacts电话查询头像,android透过查询电话号码获取联系人头像

    android通过查询电话号码获取联系人头像 // 取得Intent中的頭像 ivShowImage = (ImageView) findViewById(R.id.call_log_detail_c ...

  3. Androidの通过查询电话号码或ID获取联系人头像

    Androidの通过查询电话号码或ID获取联系人头像 1.通过联系人手机号码查询获取头像 // 取得Intent中的頭像 ivShowImage = (ImageView) findViewById( ...

  4. 运用单例模式、建造者模式和策略模式实现异步加载Android联系人资料

    学完设计模式很久了,最近又在看Android联系人提供程序的官方文档,于是就想实现一个方便的联系人管理程序demo,而联系人管理程序demo的核心就是要实现一个异步加载联系人资料的类,于是就有了下文. ...

  5. android用于查询数据的方法,android: SQLite查询数据

    掌握了查询数据的方法之后,你也就将数据库的 CRUD 操 作全部学完了.不过千万不要因此而放松,因为查询数据也是在 CRUD 中最复杂的一种 操作. 我们都知道 SQL 的全称是 Structured ...

  6. MySQL使用 IN 查询取出数据排序问题(与in排序相同、不排序)

    MySQL使用 IN 查询取出数据排序问题(与in排序相同) 今天在项目中遇到一个问题,就是做一个最近浏览的功能,但是功能做出来了,取出数据时候要用到类似这么一条带in查询的sql语句, select ...

  7. Android Gradle查询器

    Android Gradle查询器 Gradle please 官网:http://gradleplease.appspot.com/ Gradle please是一个在线工具,它能帮助你找到Grad ...

  8. Android联系人Contacts详解

    1.获取联系人详细信息 在(一)中我们只是获取了联系人的ID和NAME,但是这是远远不够的,怎么样获取其他的值呢? public void fetchContactInformation() {Str ...

  9. Android服务查询完整过程源码分析

    Android服务注册完整过程源码分析中从上到下详细分析了Android系统的服务注册过程,本文同样针对AudioService服务来介绍Android服务的查询过程. 客户端进程数据发送过程 pri ...

最新文章

  1. 以系统时间命名文件方法(C++)
  2. liunx系统mysql全量备份和增量备份
  3. 将若干字符串按字母顺序(由小到大)输出(用指针)
  4. pyqt5设置按钮,移上去变为手型
  5. 巴菲特投资50年的5个心得
  6. php获得表单数值,php 表单数据的获取代码
  7. mysql 全文搜索怎么设置_mysql 全文搜索 技巧
  8. Multisim14仿真使用汇总
  9. 软件或者网站的版权声明中的两个时间是什么意思?该如何正确书写?
  10. Android ScrollView 长截屏
  11. 【原创】基于JavaWeb的医院预约挂号系统(医院挂号管理系统毕业设计)
  12. NBUT 1181 Big Mouth of Abyss - Kog'Maw(删k位留最大最小数)
  13. MFC C++视频播放和视频的浓缩播放和检测目标接口
  14. Visionpro工具用途中文介绍
  15. 《统计学》贾俊平 第一章 导论总结
  16. 【转载】专家答疑:Silverlight的用户体验优化
  17. 【总线】一文看懂 UART 通信协议
  18. 树莓派raspbian OS 64位系统(beta)下载和更换源
  19. 开发板ARM加FPGA架构运动控制卡 运动控制器 架构源码 原理图 资料包含此运动控制卡原理图,PCB图
  20. Duplicate column name错误办法

热门文章

  1. 滴滴出行再次“调价”为哪般?
  2. 三种中心化Mean Centered
  3. Arcgis中将字段带入为3dmax模型名称(二)
  4. datagridview序号左对齐_winform DataGridView数据导出到excel中
  5. linux sed 打印行号,sed 匹配pattern并输出行号
  6. 算法进阶--SVM原理
  7. 视频教程-C#Winform报表与打印技术——自定义报表的实现-C#
  8. react高阶组件详解
  9. 奖状如何批量打印出来
  10. Postman接口测试——我看过最详细+全面的文章教程了【转载】