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. 存储过程只在创造时进行编译即可,以 ...
随机推荐
- POJ 1023
#include <iostream> #include <string> #include <cmath> #define MAXN 65 int op[MAXN ...
- HDFS DATANODE 磁盘容量的最小值
HDFS的DATANODE的剩余空间具体要到多大?关于这个问题,下面记录下对这个问题的调查 昨天,讨论群里面给出了一个异常: op@odbtest bin]$ hadoop fs -put ../tm ...
- puppet的使用:puppet配置文件介绍
配置文件的产生 Puppet安装完后,配置文件就产生了,名称为puppet.conf,一般在/etc/puppet路径下. master也可以通过命令: puppet master --genconf ...
- JVM-Java GC分析
如何获取JavaGC日志 用动态命令查看: jstat -gc 1262 2000 20 每隔20秒输入一次日志,总共输入20次 设置GC参数打印出日志 -XX:+PrintGC 输出GC日志 -X ...
- MongoDB运行状态、性能监控,分析
转载自这位仁兄:地址 mongostat详解 mongostat是mongdb自带的状态检测工具,在命令行下使用.它会间隔固定时间获取mongodb的当前运行状态,并输出.如果你发现数据库突然变慢或者 ...
- Eclipse打不开 提示an error has occurred.see the log file
有时由于Eclipse卡死,强制关闭之后会出现打不开的情况.弹窗提示: 查看log文件,发现有这样的信息: !MESSAGE The workspace exited with unsaved ch ...
- Eclipse删除switch workspace下多余的workspace
第一步:修改org.eclipse.ui.ide.prefs 文件 打开Eclipse目录的\configuration\.settings目录,找到org.eclipse.ui.ide.prefs ...
- MySQL查询时区分大小写
在创建MySQL数据库时,下面这些参数可供我们选择:*_bin: 表示的是binary case sensitive collation,也就是说是区分大小写的 *_cs: case sensitiv ...
- 编写高质量JavaScript代码的68个有效方法
简介: <Effective JavaScript:编写高质量JavaScript代码的68个有效方法>共分为7章,分别涵盖JavaScript的不同主题.第1章主要讲述最基本的主题,如版 ...
- JavaScript深浅拷贝
深浅拷贝 基本类型和引用类型 ECMAScript 中的变量类型分为两类: 基本类型:undefined,null,布尔值(Boolean),字符串(String),数值(Number) 引用类型: ...