android原始sqlite中query的複雜用法?
android直接執行sql是execSQL(String sql)。
這個方法可以執行任意sql語句。但是改變這個不夠靈活。
query這個方法可以很好的解決這個問題。
執行query查詢指定的數據表返回一個帶遊標的數據集
工具/原料
編譯工具:Eclipse
方法/步驟
因為只是介紹一個sqlite的方法,我們這裡就不解釋項目結構什麼的。
建表等我們也不說了。
(Cursor) query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)
現在對參數的解釋
String table: 要查詢的那個表
String[] columns: 返回那一列,如果參數是null,則返回所有列。
(不過不推薦這個樣子)
String selection: 返回那一行的過濾器。
(格式是SQL的WHERE,設置為null,返回這個table的所有行)
String[] selectionArgs: 在selection字段中可能會用'?'的形式來加一些額外的參數。
String groupBy: 一個過濾器,如何來分組。(設置為null則不分組)
String having: 分組後聚合的過濾條件。(作用和sql語句的having作用一樣)
String orderBy: 排序,格式是SQL的ORDER一樣。
(設置null使用默認(無序unonder)排列。)
String limit: 返回的行數,設置為null表示沒有限制條款。
例子如下圖:
query返回一個Cursor。
針對遊標(Cursor)也提供了不少方法
getCount():總記錄條數
isFirst():判斷是否第一條記錄
isLast():判斷是否最後一條記錄
moveToFirst():移動到第一條記錄
moveToLast():移動到最後一條記錄
move(int offset):移動到指定的記錄
moveToNext():移動到嚇一條記錄
moveToPrevious():移動到上一條記錄
getColumnIndex(String columnName):獲得指定列索引的int類型值
sql語句中聚合函數的編寫為例如:SUM, COUNT, MAX, AVG等。這些函數和其它函數的根本區別就是它們一般作用在多條記錄上。 SELECT SUM(population) FROM bbc
sql語句中having是分組(group by)後的篩選條件,分組後的數據組內再篩選where則是在分組前篩選。
通過使用GROUP BY 子句,可以讓SUM 和 COUNT 這些函數對屬於一組的數據起作用。
HAVING子句可以讓我們篩選成組後的各組數據。 WHERE子句在聚合前先篩選記錄。也就是說作用在GROUP BY 子句和HAVING子句前。而 HAVING子句在聚合後對組記錄進行篩選。
注意事項
這次我沒有項目來舉例,只是以部分片段做舉例,展示用法。
這個經驗只是說明這個方法中多個參數的意思,這幾個參數對應sql語句那幾個部分。