比如要用实现这么一个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";
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对象,可以通过...
开发者可以通过实现ContentProvider类并注册到Android系统,从而使得其他应用能够通过标准的URI来查询、插入、更新或删除数据。 综上所述,Android的数据存储体系提供了多样化的选择,开发者可以根据实际需求灵活...
源代码可能包含如何使用这些工具动态构造查询条件,进行多表联查,以及使用WHERE、GROUP BY、HAVING、ORDER BY和LIMIT子句的例子。 5. 异步查询与线程安全: 由于数据库操作可能涉及I/O,直接在主线程进行可能导致...
这可能包括WHERE子句来过滤结果,ORDER BY子句进行排序,以及GROUP BY和HAVING子句进行分组和条件过滤。 5. **SQLiteCursor**:执行查询后返回的结果集是SQLiteCursor对象,它提供遍历查询结果的方法,如`...
在查询过程中,我们可以使用SQL的`GROUP BY`和`HAVING`语句来分组相同姓名的联系人,并通过`COUNT()`函数找出每个组中包含的电话号码数量。这样,我们可以确保即使有多个电话号码,每个联系人也会被正确地显示出来。...
此外,还可以使用"WHERE"子句进行条件查询,"GROUP BY"和"HAVING"进行分组筛选,"ORDER BY"进行排序,以及"JOIN"实现表之间的连接操作。 4. Cursor对象:在Android中,查询结果通常返回一个Cursor对象,它是一个...
对于复杂的查询,可以使用SQLite的JOIN、WHERE、GROUP BY、HAVING、ORDER BY和LIMIT子句来实现。例如,通过JOIN可以联接多个表,WHERE用于筛选数据,GROUP BY和HAVING用于分组统计,ORDER BY进行排序,LIMIT则用来...
3. `query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)`:执行查询操作,返回一个`Cursor`对象,可以遍历查询结果...
- `SELECT`:从表中查询数据,可以通过`WHERE`子句指定条件,`JOIN`进行多表连接,`GROUP BY`和`HAVING`用于分组和过滤,`ORDER BY`进行排序,`LIMIT`和`OFFSET`用于分页。 - `INSERT INTO`:将数据插入到表中。 ...
`query()`方法接收多个参数,包括要查询的表名、要选择的列名、WHERE子句(这里根据_id匹配)、WHERE子句的参数、GROUP BY子句、HAVING子句和ORDER BY子句。在获取查询结果后,通过遍历Cursor对象来获取并封装数据。...
- SELECT用于查询数据,可以结合WHERE、GROUP BY、HAVING和ORDER BY进行复杂查询。 - UPDATE用于更新现有数据。 - DELETE FROM用于删除数据。 - ALTER TABLE用于修改表结构,如添加或删除列。 - DROP TABLE用于删除...
可以使用`WHERE`子句指定查询条件,`ORDER BY`进行排序,`GROUP BY`进行分组,`LIMIT`限制返回结果的数量。 ```sql SELECT * FROM MyTable WHERE age > 18 ORDER BY age DESC LIMIT 10; ``` 3. 数据更新:使用`...
- `query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)`:执行查询并返回`Cursor`对象。 3. `Model`类:通常代表数据库中的一个...
- **查询数据**:使用`SELECT`语句,可以组合使用`WHERE`、`ORDER BY`、`GROUP BY`等子句进行条件查询、排序和分组。 - **更新数据**:使用`UPDATE`语句,如`UPDATE table_name SET column1 = value1 WHERE ...
3. **SELECT**:查询数据,可以使用`WHERE`子句过滤结果,`ORDER BY`进行排序,`GROUP BY`进行分组,以及`JOIN`进行表连接。 4. **UPDATE**:更新数据,例如:`UPDATE table_name SET column1 = new_value WHERE ...
此外,`WHERE`子句用于指定查询条件,`JOIN`用于合并多个表的数据,`GROUP BY`和`HAVING`用于数据分组,`ORDER BY`用于排序结果。 SQLiteTest可能还会涵盖`ContentProvider`的使用,这是Android系统中数据共享的一...
- `SELECT`用于查询数据,可以配合`WHERE`、`ORDER BY`和`GROUP BY`等子句进行条件筛选和排序。 - `UPDATE`更新已有数据。 - `DELETE FROM`删除数据。 4. **ContentProvider**:虽然可以直接使用SQL操作数据库,...
3. `query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)`:执行查询操作,返回一个`Cursor`对象,包含查询结果。...
6. **查询数据**:使用`SELECT`语句获取数据,可以配合`WHERE`、`ORDER BY`、`GROUP BY`等子句进行筛选、排序和分组。 ```sql SELECT * FROM Users WHERE name = 'John Doe' ORDER BY email DESC; ``` 7. **更新...
5. 查询数据:SQLite提供了SELECT语句来进行数据查询,可以使用WHERE子句指定条件,ORDER BY和GROUP BY子句进行排序和分组,以及JOIN操作连接多个表。在Android中,可使用SQLiteDatabase的query()方法进行查询操作。...