【问题标题】:How to fetch the maximum call duration record from Contacts database in android, using a cursor?如何使用游标从 android 中的联系人数据库中获取最长通话时长记录?
【发布时间】:2016-10-29 04:08:52
【问题描述】:

我正在使用下面的代码在跟踪线程后从 android 中的通话记录数据库中检索最长通话时长:Querying the max value of a column in SQLite For Android

Cursor cur = managedQuery(CallLog.Calls.CONTENT_URI,new String[]{ "MAX("+CallLog.Calls.DURATION+")"}, null,null, null);

我得到了这个运行时错误。

java.lang.IllegalArgumentException: Invalid column MAX(duration)

任何帮助将不胜感激。谢谢你

【问题讨论】:

    标签: java android database sqlite


    【解决方案1】:

    将查询语句更改为

    Cursor cur = managedQuery(CallLog.Calls.CONTENT_URI,null,"MAX("+CallLog.Calls.DURATION+")",null, null);

    传递给managedQuery() 的参数是(Uri uri, String[] projection, String selection,String[] selectionArgs, String sortOrder)。 您正在传递MAX(duration) 代替第二个参数,即String[] projection,这基本上是为了决定“从哪些列中获取数据”。 由于没有名为 MAX(duration) 的列,因此出现错误。

    您想要的是在第三个参数中传递它,即String selection 以“选择”一列的最大值。

    编辑: managedQuery() 已被弃用,以下链接完美地回答了这个问题。 https://stackoverflow.com/a/5006853/6168097

    【讨论】:

    • 情况并非如此,因为在形成的 sql 语句中,它被放置在 WHERE 子句而不是 SELECT MAX(duration) 中,按照您的方法。
    • 我又挖了一点,发现 managedQuery() 已被弃用,并找到了解决您问题的确切方法。
    • 应该这样做。
    猜你喜欢
    • 2012-02-05
    • 2011-09-30
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多