SQLite中7(8)形參的query語句的用法

来源:https://www.cnblogs.com/Briddle-ch/archive/2018/07/12/9298655.html
-Advertisement-
Play Games

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這兩個函數是構成重載的。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 進入reids ##redis五種數據類型、及操作 string set key value 設置給定 key 的值。如果 key 已經存儲其他值, SET 就覆寫舊值,且無視類型。 set name 'bear' get key 返回key的值,若key不存在則返回nil ​ mset key v ...
  • 一.概述 CXPACKET是指:線程正在等待彼此完成並行處理。什麼意思呢? 當sql server發現一條指令複雜時,會決定用多個線程並行來執行,由於某些並行線程已完成工作,在等待其它並行線程來同步,這種等待就叫CXPACKET。 為什麼會有並行線程呢? 因為在sql server 里有個任務調度S ...
  • 觸發器是與表有關的資料庫對象,觸發器只能是針對創建的永久表,而不能是臨時表。 1.1 創建觸發器 trigger_time:是觸發器的觸發時間,可以是 before或after, before是檢查約束前觸發,而after是檢查約束後觸發。 trigger_event:是觸發器的觸發事件,可以是 i ...
  • 1、為什麼 APP 啟動時會出現白屏或者黑屏? 當打開一個 Activity 時,如果這個 Activity 所屬的應用還沒有在運行,系統會為這個 Activity 所屬的應用創建一個進程,但進程的創建與初始化都需要時間,在這個動作完成之前系統要做什麼呢?如果沒有任何反應的話,如果程式初始化的時間很 ...
  • 問題說明: activity中有個三級菜單,三個ListView嵌套,最後一層ListView的item中有EditText控制項。要求EditText不僅能手動輸入,還能點擊加減進行改變。EditText改變後各級目錄的得分情況要實時改變。 在EditText獲取焦點的時候點擊關閉二級目錄,或者在E ...
  • 解決項目中在string.xml 中顯示特殊符號的問題,如@號冒號等。只能考慮使用ASCII碼進行顯示: @號 &#064; :號 &#058; 空格 &#160; 以下為常見的ASCII十進位交換編碼: &#032;--> <-- 這邊是空格 &#033;-->!<-- &#034;-->"<-- ...
  • Android 雖然不是四大組件,但其並不比四大組件的地位低(涉及面的廣度和深入甚至比四大組件還複雜🔥)。而View的核心知識點“事件分發機制”則是不少剛入門同學的攔路虎(1、項目中處處遇到事件分發機制;2、面試管最喜歡提及的問題)。在實際項目的開發過程中,ScrollView 嵌套 Recycl ...
  • 定義:<?xml version="1.0" encoding="utf-8"?><resources> <string name="str1">Hello</string> <string name="str2" formatted="false"><![CDATA[值=(B-C)÷((C+D)) ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...