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. <context:component-scan>详解 转发 https://www.cnblogs.com/fightingcoding/p/component-scan.html

    <context:component-scan>详解   默认情况下,<context:component-scan>查找使用构造型(stereotype)注解所标注的类,如@ ...

  2. sehll-011:case脚本的基本用法

    ##  注意判断的括号里的用法, 变量用双引号,且括号后面带空格.否则可能会有报错. #!/bin/bash # 我们可以认为1-3是三个不同的大脚本.我这里用简单的命令代替. echo " ...

  3. (转)关于IBM小机P520的面板使用

    原文:http://www.xlgps.com/article/390810.html 经过搜索资料及自己的试验,现将解决方法记录如下.P520控制面板上有三个按钮,按钮上方有一个显示屏,上面显示你操 ...

  4. Python 日期和时间的几种输出格式

    在python中,我们可以使用 time 模块的 strftime 方法来格式化日期,例子如下: import time # 格式化成2016-03-20 11:45:39形式 print (time ...

  5. C/C++ -- Gui编程 -- Qt库的使用 -- 使用小写qDebug调试程序

    qDebug作为printf不需要头文件 qDebug()作为cout要使用头文件<QDebug> -----debug.cpp----- -----debug.cpp----- #inc ...

  6. Chapter 3 Phenomenon——13

    "Bella, I'm so sorry!""I'm fine, Tyler — you look awful, are you all right?" “Be ...

  7. Chapter 3 Phenomenon——5

    I saw several things simultaneously. 我同时看见了几件事情. Nothing was moving in slow motion,the way it does i ...

  8. Java虚拟机(一):JVM简介

    JVM简介 Java虚拟机(JVM)是由Java虚拟机规范定义的,其上运行的是字节码指令集.这种字节码指令集包含一个字节的操作码(opcode),零至多个操作数(oprand),虚拟机规范明确定义了每 ...

  9. Self-Attention与Transformer

    直观理解与模型整体结构 先来看一个翻译的例子“I arrived at the bank after crossing the river” 这里面的bank指的是银行还是河岸呢,这就需要我们联系上下 ...

  10. nginx 学习笔记(3) nginx管理

    nginx可以通过向其发送信号来进行管理.默认情况下主进程的进程ID写到文件/usr/local/nginx/logs/nginx.pid中.当然也可以在配置文件中自定义该pid文件,自定义使用pid ...