android 联系人查询结果的排序问题

原创 2011年01月13日 23:00:00

      最近,有需要要查询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数据库中查找一条数据 query方法详解

public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String gro...

Android 获得联系人并排序

方式一:通过观察导出的数据库的字段,根据字段去查询(在小米手机上查询不全)方法没有实现排序   import android.content.Context; import android.data...

Android 使用ListView的A-Z字母排序功能实现联系人模块

在上一篇文章当中,主要学习了ListView的A-Z字母排序功能以及根据输入框的输入值改变来过滤搜索结果,如果输入框里面的值为空,更新为原来的列表,否则为过滤数据列表,包括汉字转成拼音的功能,如果你还...

ormlite 在android中 排序 条件查询

ormlite 在android中 排序 条件查询 all = dao.queryBuilder().orderBy("Id", true).where().eq("Type", key).an...

android 联系人查询结果的排序问题

原帖地址:http://blog.csdn.net/chenyufei1013/article/details/6136795 最近,有需要要查询android 1.6联系人的数据库...

mysql查询结果包含空的列排序问题

如下:    按照表中某一字段排序。该字段可能存在空值,发现在升序排列时空值排在最前。 mysql语句如下: mysql> select * from bjy_order ord...

Android自定义控件---联系人列表A-Z排序

这几天在做IM模块,设计图要求做一个类似下图所示的自定义控件。 我百度了一下,发现类似的Ddmo有很多,但是还不能完全满足设计图的需求。 参考了几个比较有价值的demo琢磨了一天总算做出来了,现在...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)