我正在使用 CursorLoader 从我的内容提供者返回记录计数,并且我只需要计算那些 7 天或更少天数的记录。到目前为止,我尝试完成这项工作的尝试只产生了挫败感,因为计数始终为零。我对 Sqlite 和 CursorLoaders 的经验有限,我怀疑我犯了一个非常简单的错误。这是我的代码:
String strCriteria = "SELECT julianday('now') - julianday('" + Session.DATE_STRING
+ "','gregorian') <8";
return new CursorLoader(getSherlockActivity(), Session.CONTENT_URI,
new String[] {"count(" + Session.TABLE_NAME + "." + Session._ID +") AS Count " },
strCriteria, null,null);
谁能看到我哪里出错了?
我应该补充一点,DATE_STRING 列将日期存储为 yyyy-MM-dd 格式的字符串。实际上,我确实有另一列将日期存储为 long,但我还没有弄清楚如何使用数值进行 Sqlite 日期查询。
更新问题:如果我将 strCriteria 定义的 Session.DATE_STRING 部分替换为文本日期,则一切正常。例如,如果我使用以下代码:
String strCriteria = "SELECT julianday('now') - julianday('" + "2013-05-08"
+ "','gregorian') <8";
...而不是我上面的内容,然后一切正常。这使我相信我的代码实际上并未将 Session.DATE_STRING 列的值放入字符串中,而是将其他内容放入字符串中,很可能是该列的实际字符串名称。我不知道如何解决这个问题,因为我假设查询实际上会在运行时填写正确的数据值。任何建议将不胜感激!
使用解决方案进行编辑:我已经弄清楚如何使其正常工作。这真的很简单 - 我必须从 Session.DATE_STRING 周围删除 ' 以确保插入列的值,而不是列名。因此,这就是需要定义 strCriteria 的方式:
String strCriteria = "SELECT julianday('now') - julianday(" + Session.DATE_STRING
+ ",'gregorian') <8";