ContentResolver query 特殊条件查询: in,like

SQlite支持in、like运算符,在Android中通过ContentResolver的query方法同样可以使用。只是需要注意以下几点:


1.   like操作:注意事项:like前需要有空格

          String title = "Faded";

    where = MediaStore.Audio.Media.TITLE + " like?";
    args = new String[]{"%" + title+ "%"};
 2. in 操作:

         如果,要把args和where参数分开写,就像下面这样:

        如:ArrayList<> list;

                where = MediaStore.Audio.Media.TITLE + "  in(?)";

args = new String[]{TextUtils.join(",",list)};

           如果这样写,只有在list中只有一个元素时,能查询到(即返回的cursor.getCount == 1);如果list中有多个元素,则返回的cursor.getCount == 0;

           要想成功,要按照下面的写法:    

            where = MediaStore.Audio.Media.TITLE + " in("+TextUtils.join(",",list)+");

    args = null;

            根据要比较条件的列的值类型,上面红色字体部分需要按照如下规则编写,:

           (1)如果要比较的列的值是Integer型,则直接按照红色字体部分写就可以;

举例:假设要查询的列是A,要查询的值的范围是1,2,3则 条件是Where A in(1,2,3) 

           (2)如果要比较的列的值是String型,则需要写成下面这个样子:

             where = MediaStore.Audio.Media.TITLE + " in("+"\'"+TextUtils.join("\',\'",list)+"\'"+"); 

             或 where = MediaStore.Audio.Media.TITLE + " in("+"\""+TextUtils.join("\",\"",list)+"\""+");

举例:假设要查询的列是B,要查询的范围是A、B、C,则条件应该是 where B in('A','B','C')  或 where B in("A","B","C");



         

         

你可能感兴趣的:(Android)