`
zengyan2012
  • 浏览: 414227 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android contentProvider group by查询数据

阅读更多

转自:   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

分享到:
评论
3 楼 zhanggaobo 2013-05-10  
您好 楼主
       请问在4.0中count(_id) 查询每组数量的解决了没?
2 楼 zengyan2012 2012-10-15  
rabbpig5 写道
楼主,这个方法在4.0的系统上会报错,Invalid column COUNT(*) AS calls_count

额。。4.0我没试验过。。。
你找到了解决方法的时候跟我说下,怎么做的。。。

谢谢。。!!
1 楼 rabbpig5 2012-10-15  
楼主,这个方法在4.0的系统上会报错,Invalid column COUNT(*) AS calls_count

相关推荐

    Android ContentProvider实现手机联系人读取和插入

    - `query()`方法:使用ContentResolver的query方法进行数据查询,参数包括:要查询的URI、所需列、WHERE子句(筛选条件)、GROUP BY子句和ORDER BY子句。 - `Cursor`对象:查询结果会返回一个Cursor对象,可以通过...

    Android 查询工具源代码.rar

    源代码可能包含如何使用这些工具动态构造查询条件,进行多表联查,以及使用WHERE、GROUP BY、HAVING、ORDER BY和LIMIT子句的例子。 5. 异步查询与线程安全: 由于数据库操作可能涉及I/O,直接在主线程进行可能导致...

    Android 快捷查询源码.rar

    在Android开发中,快捷查询源码是至关重要的,它涉及到应用程序如何高效地处理用户的数据请求。这份"Android 快捷查询源码"很可能是为了演示或教学如何在Android环境中实现快速、高效的数据库查询功能。在Android...

    Android通讯录联系人查询,自动提示,一个人多个号码

    在查询过程中,我们可以使用SQL的`GROUP BY`和`HAVING`语句来分组相同姓名的联系人,并通过`COUNT()`函数找出每个组中包含的电话号码数量。这样,我们可以确保即使有多个电话号码,每个联系人也会被正确地显示出来。...

    db.rar_android_android DB

    此外,还可以使用"WHERE"子句进行条件查询,"GROUP BY"和"HAVING"进行分组筛选,"ORDER BY"进行排序,以及"JOIN"实现表之间的连接操作。 4. Cursor对象:在Android中,查询结果通常返回一个Cursor对象,它是一个...

    android操作数据库Sqlite源代码

    - `query(String tableName, String[] columns, String whereClause, String[] whereArgs, String groupBy, String having, String orderBy)`:查询数据,返回一个Cursor对象。 4. **Model类**:代表数据库中的表...

    Android数据库技术[归纳].pdf

    3. `query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)`:执行查询操作,返回一个`Cursor`对象,可以遍历查询结果...

    smalltools_android源码_

    `query()`方法接收多个参数,包括要查询的表名、要选择的列名、WHERE子句(这里根据_id匹配)、WHERE子句的参数、GROUP BY子句、HAVING子句和ORDER BY子句。在获取查询结果后,通过遍历Cursor对象来获取并封装数据。...

    Android操作SQLite数据库Demo

    - 查询数据:`Cursor cursor = db.query(TABLE_NAME, columns, selection, selectionArgs, groupBy, having, orderBy);` - 更新数据:`int rowsAffected = db.update(TABLE_NAME, values, whereClause, whereArgs)...

    SQLite 详细教程和 ANDROID API chm格式

    4. **查询数据**:使用 `SELECT` 语句从表中检索数据,可以结合 `WHERE` 条件、`GROUP BY` 分组、`ORDER BY` 排序和 `HAVING` 过滤。 5. **更新数据**:用 `UPDATE` 语句修改表中的数据,通常配合 `WHERE` 条件指定...

    数据存储1

    开发者可以通过实现ContentProvider类并注册到Android系统,从而使得其他应用能够通过标准的URI来查询、插入、更新或删除数据。 综上所述,Android的数据存储体系提供了多样化的选择,开发者可以根据实际需求灵活...

    Android数据库技术.pdf

    3. `query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)`:执行查询操作,返回一个`Cursor`对象,包含查询结果。...

    android sqlite的应用

    - **查询数据**:使用`SELECT`语句,可以组合使用`WHERE`、`ORDER BY`、`GROUP BY`等子句进行条件查询、排序和分组。 - **更新数据**:使用`UPDATE`语句,如`UPDATE table_name SET column1 = value1 WHERE ...

    sqlite学习资源,包括管理器,数据库文件,Android project

    - SELECT用于查询数据,可以结合WHERE、GROUP BY、HAVING和ORDER BY进行复杂查询。 - UPDATE用于更新现有数据。 - DELETE FROM用于删除数据。 - ALTER TABLE用于修改表结构,如添加或删除列。 - DROP TABLE用于删除...

    android 数据库基础源码

    - `query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy)`:执行查询并返回`Cursor`对象。 3. `Model`类:通常代表数据库中的一个...

    实验项目报告第7章.doc android studio SQLite数据库的创建、增删改查操作 SharedPreferen

    可以组合使用 `WHERE`、`ORDER BY`、`GROUP BY` 和 `JOIN` 等子句来实现复杂的查询。 3. **SQLiteOpenHelper 示例** - 创建数据库实例,通常在 Activity 或 Service 的 `onCreate()` 方法中完成。 - 创建 `...

    Android sql练习合集.rar

    4. **数据插入与查询**:熟悉INSERT INTO语句,学习如何插入数据到表中,以及使用SELECT语句进行数据查询,包括单表查询,多表联合查询,以及使用WHERE、GROUP BY、HAVING、ORDER BY和LIMIT子句进行复杂查询。...

    Android数据库SQLite基本操作工程

    - `GROUP BY`和`HAVING`用于分组数据,`ORDER BY`对结果进行排序。 4. **插入数据** - 使用`insert()`方法将数据插入表中。这个方法接收表名、空值占位符和一个包含实际值的`ContentValues`对象作为参数。 - ...

    001AndroidSqlite

    2. 数据查询:使用`SELECT`语句获取数据。可以使用`WHERE`子句指定查询条件,`ORDER BY`进行排序,`GROUP BY`进行分组,`LIMIT`限制返回结果的数量。 ```sql SELECT * FROM MyTable WHERE age > 18 ORDER BY age ...

    华为Android面试题1

    "华为Android面试题精要...在 SQLite 中,可以使用 SQL 语句进行数据查询,例如,SUM、GROUP BY、HAVING 等语句。 在封装正式版 APK 时,需要注意签名、align、zipalign 等步骤,并且需要注意不同应用商城的发布要求。

Global site tag (gtag.js) - Google Analytics