转自: http://www.eoeandroid.com/thread-31662-1-1.html
比如要用实现这么一个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
分享到:
相关推荐
- `query()`方法:使用ContentResolver的query方法进行数据查询,参数包括:要查询的URI、所需列、WHERE子句(筛选条件)、GROUP BY子句和ORDER BY子句。 - `Cursor`对象:查询结果会返回一个Cursor对象,可以通过...
源代码可能包含如何使用这些工具动态构造查询条件,进行多表联查,以及使用WHERE、GROUP BY、HAVING、ORDER BY和LIMIT子句的例子。 5. 异步查询与线程安全: 由于数据库操作可能涉及I/O,直接在主线程进行可能导致...
在Android开发中,快捷查询源码是至关重要的,它涉及到应用程序如何高效地处理用户的数据请求。这份"Android 快捷查询源码"很可能是为了演示或教学如何在Android环境中实现快速、高效的数据库查询功能。在Android...
在查询过程中,我们可以使用SQL的`GROUP BY`和`HAVING`语句来分组相同姓名的联系人,并通过`COUNT()`函数找出每个组中包含的电话号码数量。这样,我们可以确保即使有多个电话号码,每个联系人也会被正确地显示出来。...
此外,还可以使用"WHERE"子句进行条件查询,"GROUP BY"和"HAVING"进行分组筛选,"ORDER BY"进行排序,以及"JOIN"实现表之间的连接操作。 4. Cursor对象:在Android中,查询结果通常返回一个Cursor对象,它是一个...
- `query(String tableName, String[] columns, String whereClause, String[] whereArgs, String groupBy, String having, String orderBy)`:查询数据,返回一个Cursor对象。 4. **Model类**:代表数据库中的表...
3. `query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)`:执行查询操作,返回一个`Cursor`对象,可以遍历查询结果...
`query()`方法接收多个参数,包括要查询的表名、要选择的列名、WHERE子句(这里根据_id匹配)、WHERE子句的参数、GROUP BY子句、HAVING子句和ORDER BY子句。在获取查询结果后,通过遍历Cursor对象来获取并封装数据。...
- 查询数据:`Cursor cursor = db.query(TABLE_NAME, columns, selection, selectionArgs, groupBy, having, orderBy);` - 更新数据:`int rowsAffected = db.update(TABLE_NAME, values, whereClause, whereArgs)...
4. **查询数据**:使用 `SELECT` 语句从表中检索数据,可以结合 `WHERE` 条件、`GROUP BY` 分组、`ORDER BY` 排序和 `HAVING` 过滤。 5. **更新数据**:用 `UPDATE` 语句修改表中的数据,通常配合 `WHERE` 条件指定...
开发者可以通过实现ContentProvider类并注册到Android系统,从而使得其他应用能够通过标准的URI来查询、插入、更新或删除数据。 综上所述,Android的数据存储体系提供了多样化的选择,开发者可以根据实际需求灵活...
3. `query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)`:执行查询操作,返回一个`Cursor`对象,包含查询结果。...
- **查询数据**:使用`SELECT`语句,可以组合使用`WHERE`、`ORDER BY`、`GROUP BY`等子句进行条件查询、排序和分组。 - **更新数据**:使用`UPDATE`语句,如`UPDATE table_name SET column1 = value1 WHERE ...
- SELECT用于查询数据,可以结合WHERE、GROUP BY、HAVING和ORDER BY进行复杂查询。 - UPDATE用于更新现有数据。 - DELETE FROM用于删除数据。 - ALTER TABLE用于修改表结构,如添加或删除列。 - DROP TABLE用于删除...
- `query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)`:执行查询并返回`Cursor`对象。 3. `Model`类:通常代表数据库中的一个...
可以组合使用 `WHERE`、`ORDER BY`、`GROUP BY` 和 `JOIN` 等子句来实现复杂的查询。 3. **SQLiteOpenHelper 示例** - 创建数据库实例,通常在 Activity 或 Service 的 `onCreate()` 方法中完成。 - 创建 `...
4. **数据插入与查询**:熟悉INSERT INTO语句,学习如何插入数据到表中,以及使用SELECT语句进行数据查询,包括单表查询,多表联合查询,以及使用WHERE、GROUP BY、HAVING、ORDER BY和LIMIT子句进行复杂查询。...
- `GROUP BY`和`HAVING`用于分组数据,`ORDER BY`对结果进行排序。 4. **插入数据** - 使用`insert()`方法将数据插入表中。这个方法接收表名、空值占位符和一个包含实际值的`ContentValues`对象作为参数。 - ...
2. 数据查询:使用`SELECT`语句获取数据。可以使用`WHERE`子句指定查询条件,`ORDER BY`进行排序,`GROUP BY`进行分组,`LIMIT`限制返回结果的数量。 ```sql SELECT * FROM MyTable WHERE age > 18 ORDER BY age ...
"华为Android面试题精要...在 SQLite 中,可以使用 SQL 语句进行数据查询,例如,SUM、GROUP BY、HAVING 等语句。 在封装正式版 APK 时,需要注意签名、align、zipalign 等步骤,并且需要注意不同应用商城的发布要求。