SQLite中7(8)形参的query语句的用法
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语句的用法的更多相关文章
- sqlserver中drop、truncate和delete语句的用法
虽然小编不建议大家去用命令删除数据库表中的东西,但是这些删除命令总有用的着的地方. 说到删除表数据的关键字,大家记得最多的可能就是delete了 然而我们做数据库开发,读取数据库数据.对另外的两兄弟用 ...
- 在Eclipse中用图形界面的方式获取Salesforce中Object的Query语句
对Salesforce中的Object进行相应的Query是必不可少的操作,大家可以去这个链接去看看官网的解读 http://docs.database.com/dbcom/en-us/db_sos ...
- SQLite中特殊的INSERT语句
SQLite中特殊的INSERT语句 在SQLite中,INSERT是基本语句,用来向表中插入数据.但是当表中存在字段存在唯一.非空.检查.主键等约束时,插入的数据很容易和约束冲突,造成插入操作失 ...
- sqlite中的replace、insert、update之前的区别
本文转自http://www.ithao123.cn/content-933827.html,在此感谢作者 android数据库操作,有两种方式,一种用android提供给我们的数据库操作函数inse ...
- JS中的函数,Array对象,for-in语句,with语句,自定义对象,Prototype
一)函数 A)JS中的函数的定义格式: function add(a,b) { var sum = a+b; document.write("两个数的和是:" + sum); // ...
- 谈数据库索引和Sqlite中索引的使用
要使用索引对数据库的数据操作进行优化,那必须明确几个问题:1.什么是索引2.索引的原理3.索引的优缺点4.什么时候需要使用索引,如何使用围绕这几个问题,来探究索引在数据库操作中所起到的作用. 1.数据 ...
- SQLite 中的各种限制
英文原文:Limits In SQLite 本文定义了 SQLite 的限制,如何针对这些限制定制特定的应用程序.默认的限制设置通常是适当的,几乎适合于每一个应用.有一些应用程序可能需要在 ...
- SQLite中不支持的sql语法
今天很自然的在写Sql语句的时候用了Top,一开始没发现问题,因为我从数据库读出的值正好是0,而我习惯变量定义的时候也都赋值0,可是到我不要0的时候我就发现问题了.后来才知道,可爱的小sqlite竟然 ...
- SQL Server中存储过程比直接运行SQL语句慢的原因
原文:SQL Server中存储过程比直接运行SQL语句慢的原因 在很多的资料中都描述说SQLSERVER的存储过程较普通的SQL语句有以下优点: 1. 存储过程只在创造时进行编译即可,以 ...
随机推荐
- SLAP(Speaker-Listener Label Propagation Algorithm)社区发现算法
其中部分转载的社区发现SLPA算法文章 一.概念 社区(community)定义:同一社区内的节点与节点之间关系紧密,而社区与社区之间的关系稀疏. 设图G=G(V,E),所谓社区发现是指在图G中确定n ...
- zabbix 调用python脚本监控 磁盘剩余空间(创建模版,创建监控项,创建触发器)
主要 记录一下 使用zabbix 自己创建模版.监控项.触发器,并调用python脚本. 需求: 监控备份机磁盘剩余空间(windows系统) 一.安装zabbix_agent 比较简单 修改配置文 ...
- sql server 2012 数据库日志文件过大,怎么缩小?
最近发现网站不能访问,原因数据库服务器磁盘剩余空间没了.再细查发现日志文件占用了70%,收缩日志文件失败. 在网上查找原因,是没有备份不能收缩日志文件. 临时解决的方式: 备份事务日志,再收缩日志文件 ...
- CSSREM
一个CSS的px值转rem值的Sublime Text 3自动完成插件. 安装 下载本项目,比如:git clone https://github.com/flashlizi/cssrem 进入pac ...
- 命令行创建Android应用,命令行生成签名文件,命令行查看签名信息,对APK包签名并编译运行
一.命令行创建Android应用 android create project -n HelloWorld -t android-22 -p HelloWorld1 -k org.crazyit.he ...
- nginx pcre错误
以上错误是因为pcre的路径指定的不对,--with-pcre模块应该指向的是pcre解压后的源码包,而不是pcre的安装路径. ]$./configure --prefix=/data01/logs ...
- Chapter 3 Phenomenon——16
"Your X-rays look good," he said. "Does your head hurt? Edward said you hit it pretty ...
- Spring MVC 实现web Socket向前端实时推送数据
最近项目中用到了webSocket服务,由后台实时向所有的前端推送消息,前端暂时是不可以发消息给后端的,数据的来源是由具体的设备数据收集器收集起来,然后通过socket推送给后端,后端收到数据后,再将 ...
- springboot-13-junitTest
junitTest, 提喜欢用的一个方法, 在测试代码时非常好用 1, 添加maven依赖 <!-- 加入spring-test依赖 --> <dependency> < ...
- 深入SpringBoot:自定义Endpoint(转)
本文转自:https://www.jianshu.com/p/9fab4e81d7bb 最近在研究改写actuator的方式,这些放这里已备忘 Endpoint SpringBoot的Endpoint ...