比如要用實現這麼一個sql語句:
SELECT _id, number, date, duration, type, name, numbertype,
numberlabel, COUNT(*) FROM calls GROUP BY number,type,date/8640000
ORDER BY date DESC
這個在一般的SQL編譯工具裏都能正常運行,在ContentRosolver中有些不一樣。
用ContentRosolver中的query這麼寫:
private static String CALLS_COUNT = "calls_count";
static final String[] CALL_LOG_PROJECTION = new String[] {
Calls._ID,
Calls.NUMBER,
Calls.DATE,
Calls.DURATION,
Calls.TYPE,
Calls.CACHED_NAME,
Calls.CACHED_NUMBER_TYPE,
Calls.CACHED_NUMBER_LABEL,
"COUNT(*) AS " + CALLS_COUNT
};
String selection = "0==0)
GROUP BY ("+
Calls.NUMBER+"),("+
Calls.TYPE+"),("+
Calls.DATE+"/86400000"; //這裏沒有左邊括號"("和右邊括號")"
程序會自己添加.
//0==0
一個=號和2個等於都可以.
rosolver.query(QUERY_TOKEN, null, Calls.CONTENT_URI,
CALL_LOG_PROJECTION, selection, null, Calls.DEFAULT_SORT_ORDER);
注意事項:
1 關鍵字“COUNT, AS, GROUP BY”的大小寫
2 COUNT(*) 後需要跟AS ***
3 Android會將query中的參數整合成一條sql語句,其中會將selection的字符串自動加一個括號,形成 “WHERE
(*******)”的形式,所以要特別注意selection中有括號的情況
4 GROUP BY後面的字段應該加括號,用逗號隔開。
轉化爲sql語句正確的形式應該如下:
SELECT _id, number, date, duration, type, name, numbertype,
numberlabel, COUNT(*) FROM calls WHERE (0==0) GROUP BY
(number),(type),(date/8640000) ORDER BY date DESC