SQLite中7(8)形参的query语句的用法

我们先来看看这种7形参的query语句的形参列表:

public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) {}

形参依次为:

String table:要查询哪张表,以字符串的形式给出,比如说我要查Book表,那么这个形参就填"Book"

String[] columns:要查询该表中的哪一列(哪几列),以字符串数组的形式给出,比如说我要查name这一列,那么这个形参这里就填new String[] {"name"},比如说我要查name和price这两列,那么这个形参就填new String[] {"name", "price"}

String selection:指定约束条件,要求以字符串形式给出,其中可以有占位符(当然也可以没有),先举一个没有占位符的例子:“page > 500”,表示搜索条件是书的页数大于500,如果使用占位符,那么这个条件就可以写成"page > ?",“?”处对应的值由下一个形参给出,该处形参可以有多个条件,例如要搜索书的页数大于500并且价格小于40元的书籍,那么该处形参可以填"page > ? and price < ?",两个"?"的值都由下一个形参给出

String[] selectionArgs:为占位符提供具体的值,由字符串数组的形式依次给出,例如前文中"page > ?"这个条件,那么这里就填new String[] {"500"},前文中"page > ? and price < ?"这个例子,这里就填new String[] {"500", "40"}

③+④这两个形参联合起来来构成查询的约束条件

String groupBy:简单来说,这个形参是描述如何分组的,但是这个形参不是那么好懂,因此我们用一个例子来说明:

ID NAME AGE ADDRESS SALARY
---------- ---------- ---------- ---------- ----------
Paul 32 California 20000.0
Allen 25 Texas 15000.0
Teddy 23 Norway 20000.0
Mark 25 Rich-Mond 65000.0
David 27 Texas 85000.0
Kim 22 Texas 45000.0
James 24 Houston 10000.0
Paul 32 California 20000.0
James 44 Texas 5000.0
James 45 Texas 5000.0

在上述表格中可以看到有3个James和2个Paul,但是这有一些不太一样,两个Paul的名字、年龄、地址都是一样的,这说明他们是同一个人,而三个James虽然名字一样,但是要么年龄不一样,要么地址不一样,这说明这三个Paul不是同一个人,因此,当我查询一张总工资表的时候,我可以把两个Paul合并,但不应该把三个James合并,这个时候就可以用groupBy这个形参了,在本例中判断是不是同一个人groupBy处填的东西应该为"name, age, address",这样查询就会把所有的这三列数据都相同的数据合并成一条数据(但并不是把他们的salary相加起来),也就是结果中只会有一条Paul,但是会有3条James

String having:它的作用是过滤掉一部分数据,举个例子,还是用上面那张薪水表格为例,如果你在having这个形参这里填的是"count(NAME) > 2",那么你搜到的就只有JAMES这个人的数据,也就是所有NAME出现次数没有超过2次的人都被过滤掉了,另外,这里有一点需要强调,如果你打算用having这个形参,groupBy那里必须不能为空。还有,这里这个计数计的是原始表格经过第三形参和第四形参构成的约束条件筛选之后的数目,换句话说,这个计数发生在筛选之后,但是发生在groupBy的合并之前

String orderBy:按照哪一列进行排序,列的名字以字符串形式给出,如按照id进行排序,这一个形参就填"id",另外,"desc"表示降序,"asc"表示升序,比如你要按照id进行降序排序,按照name进行升序排序,那么这个形参你就可以填"id desc, name asc"

p.s这里再补充一个额外形参:

String limit,这个形参的作用是按照你给的参数分了组合了并过了滤排好序之后,跳过前面的几个,拿几个,什么意思呢?大概就是这个样子:

我们把不加limit这一形参时理应给出的结果叫做A,那么如果limit填"3",意思是查询结果里面仅为A的前3条数据;如果limit填的是"2, 3",意思是查询结果是(跳过最前面两条数据,之后取3条数据),也就是事实上拿到的结果是A中的第3、第4、第5三条数据

简单总结limit这一形参填"i, j"就是跳过前i条数据,之后取j条数据作为结果

p.s.顺带一提,当这些形参值为null的时候,分别代表的含义总结如下:

顺序号 形参名称 形参的类型 含义 值为null时的含义
1 table String 要去查询哪一张表 不能为null
2 columns String[] 要去查询哪些列 查询所有列
3 selection String 约束条件 无约束条件,即查询所有数据
4 selectionArgs String[] 补充形参3占位符处所代表的值 形参3无占位符时填null
5 groupBy String 在哪些列都相同的情况下进行合并 不启用groupBy合并
6 having String 在形参5不为空的情况下,可以按照出现的次数进行过滤 不启用having过滤
7 orderBy String 按照哪些关键字排序 按照默认排序
8 limit String 返回结果是从第几行开始的,返回几行 无限制(即返回所有查询到的结果)

备注:形参8(limit)为null时可以不填,带limit的8形参query和不带limit的7形参query这两个函数是构成重载的。

SQLite中7(8)形参的query语句的用法的更多相关文章

  1. sqlserver中drop、truncate和delete语句的用法

    虽然小编不建议大家去用命令删除数据库表中的东西,但是这些删除命令总有用的着的地方. 说到删除表数据的关键字,大家记得最多的可能就是delete了 然而我们做数据库开发,读取数据库数据.对另外的两兄弟用 ...

  2. 在Eclipse中用图形界面的方式获取Salesforce中Object的Query语句

    对Salesforce中的Object进行相应的Query是必不可少的操作,大家可以去这个链接去看看官网的解读  http://docs.database.com/dbcom/en-us/db_sos ...

  3. SQLite中特殊的INSERT语句

    SQLite中特殊的INSERT语句   在SQLite中,INSERT是基本语句,用来向表中插入数据.但是当表中存在字段存在唯一.非空.检查.主键等约束时,插入的数据很容易和约束冲突,造成插入操作失 ...

  4. sqlite中的replace、insert、update之前的区别

    本文转自http://www.ithao123.cn/content-933827.html,在此感谢作者 android数据库操作,有两种方式,一种用android提供给我们的数据库操作函数inse ...

  5. JS中的函数,Array对象,for-in语句,with语句,自定义对象,Prototype

    一)函数 A)JS中的函数的定义格式: function add(a,b) { var sum = a+b; document.write("两个数的和是:" + sum); // ...

  6. 谈数据库索引和Sqlite中索引的使用

    要使用索引对数据库的数据操作进行优化,那必须明确几个问题:1.什么是索引2.索引的原理3.索引的优缺点4.什么时候需要使用索引,如何使用围绕这几个问题,来探究索引在数据库操作中所起到的作用. 1.数据 ...

  7. SQLite 中的各种限制

    英文原文:Limits In SQLite       本文定义了 SQLite 的限制,如何针对这些限制定制特定的应用程序.默认的限制设置通常是适当的,几乎适合于每一个应用.有一些应用程序可能需要在 ...

  8. SQLite中不支持的sql语法

    今天很自然的在写Sql语句的时候用了Top,一开始没发现问题,因为我从数据库读出的值正好是0,而我习惯变量定义的时候也都赋值0,可是到我不要0的时候我就发现问题了.后来才知道,可爱的小sqlite竟然 ...

  9. SQL Server中存储过程比直接运行SQL语句慢的原因

    原文:SQL Server中存储过程比直接运行SQL语句慢的原因 在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点: 1.       存储过程只在创造时进行编译即可,以 ...

随机推荐

  1. ubuntu 镜像站部署

    定时任务 #mirror web */5 * * * * cd /mirror && git pull #mysql mirror 0 */3 * * * rsync -av --de ...

  2. Android Touch事件派发流程源码分析

    分native侧事件派发到java侧和Framework派发事件到UI,流程看源码即可,此处不赘叙, Native侧派发事件的干活类图如下:

  3. github的本地配置和项目创建

    之前完成了github的安装和账号的注册,接下来要进行项目的创建和本地代码仓库的建立 1.创建项目 2.填写项目相关信息 注意:在给项目起名时,尽量起一些有意义的名字,否则会被管理员删除.因为服务器上 ...

  4. 【Java并发编程】:多线程环境中安全使用集合API

    在集合API中,最初设计的Vector和Hashtable是多线程安全的.例如:对于Vector来说,用来添加和删除元素的方法是同步的.如果只有一个线程与Vector的实例交互,那么,要求获取和释放对 ...

  5. 使用fiddler抓手机包遇到问题

    1,http://blog.csdn.net/roland_sun/article/details/30078353 2,参照上面不周,不能实现用自己ip:8888端口下载出证书 解决办法,先从fid ...

  6. php 按照二位数组中某个指定的字段进行排序

    /** * 按照二维数组中某个指定的某个字段进行排序 * @param $array 需要被排序的数组 * @param $flag 排序的标志 1,SORT_DESC 降序 2,SORT_ASC 升 ...

  7. Android 开发工具类 29_sendPOSTRequest

    sendPOSTRequest 业务类 package com.wangjialin.internet.userInformation.service; import java.io.OutputSt ...

  8. 【转】Hadoop vs Spark性能对比

    原文地址:http://www.cnblogs.com/jerrylead/archive/2012/08/13/2636149.html 基于Spark-0.4和Hadoop-0.20.2 1. K ...

  9. Ruby on Rails Mountable vs. Full Engine

    原文 :https://www.travisluong.com/ruby-on-rails-mountable-vs-full-engine/一个Rails Engine 本质是一个 Rails ap ...

  10. Date类学习总结(Calendar Date 字符串 相互转换 格式化)

    Date类学习总结 1.计算某一月份的最大天数 Calendar time=Calendar.getInstance();time.clear();time.set(Calendar.YEAR,yea ...