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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...