【问题标题】:SQLite date query returns no recordSQLite 日期查询不返回任何记录
【发布时间】:2013-07-25 13:48:19
【问题描述】:

我正在开发一个 Android 应用程序,我在其中搜索在给定日期之后创建的记录。我的代码是这样的

public List<NPRMember> IncrementalData(String LastDtTime) {

List<NPRMember> results = new ArrayList<NPRMember>();
SQLiteDatabase db=getMyReadableDatabase();
String lastdt="datetime("+LastDtTime+")";
Cursor cursor = null;

try{

      cursor = db.query(TABLE_NAME_NPR, new String[] { KEY_FULLNAME, KEY_FATHERNAME, 
       KEY_RCRD_SOURCE,KEY_RCRD_CRN_DATE},KEY_RCRD_CRN_DATE + ">? AND "+KEY_RCRD_SOURCE+">?",
               new String[]{lastdt, "0"}, null, null, null); 


    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
            NPRMember nprmem = cursorToMemberDetails(cursor);
            results.add(nprmem);          
            cursor.moveToNext();

    }
}catch(Exception e){
    Log.e(APP_NAME, "An error occurred while searching for "+LastDtTime+": "+e.toString(), e);
}finally{
    if(cursor!=null && !cursor.isClosed()){
        cursor.close();
    }
}

return results;

}

查询没有返回任何值,尽管我至少有一条 KEY_RCRD_CRN_DATE 2013-07-25 18:59:19 的记录 作为参数传递的 LastDtTime 的值为 2013-07-25 14:46:03。 一件有趣的事情是,如果我在 SQLite 命令提示符处运行查询,它会返回所需的记录。

  SELECT fullname, fathername, .... rcrdsource, rcrdcrtndate FROM nprmembers WHERE rcrdcrtndate>'2013-07-25
 14:46:03' AND rcrdsource>0;

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

【问题讨论】:

  • 请在此表中包含您的架构的相关部分和数据。并且请去掉所有不必要的东西来重现你的问题
  • 如果您在 Android 应用中省略 date where 子句会怎样?
  • @Frank,没有日期我得到了想要的记录。

标签: java android sqlite datetime


【解决方案1】:

参数值(lastdt)错误。

你想要的是字符串2013-07-25 18:59:19,但实际上你使用的是字符串datetime(2013-07-25 18:59:19)。 字母d2 之后,因此没有记录匹配。

lastdt的初始化改为:

String lastdt=LastDtTime;

【讨论】:

  • 我正在尝试检索大于作为参数传递的 LastDtTime 的 KEY_RCRD_CRN_DATE。在我的情况下 2013-07-25 18:59:19 (KEY_RCRD_CRN_DATE)> 2013-07-25 14:46:03 (LastDtTime),所以函数应该检索记录。
  • 在您的代码中,lastdtLastDtTime 不同。您必须删除 datetime
  • 它有效。谢谢。这是否意味着 sqlite 日期适用于字符串比较?想知道,为什么 datetime(KEY_RCRD_CRN_DATE)>datetime(LastDtTime) 不起作用
  • 我在 sqlite 中的日期存储为文本。请参阅此答案K_Anas。它说 KEY_RCRD_CRN_DATE> Datetime('2013-07-25 14:46:03') 应该可以工作。虽然它对我不起作用。困惑。
  • datetime('...') 是 SQL 表达式,但参数不是表达式而是普通值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 2013-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多