0
Cursor allDetail = allDatabase2.rawQuery("Select "+ TaskDatabaseManager.KEY_ROWID + ","+ TaskDatabaseManager.TASK_TIMES + ","+ TaskDatabaseManager.TASK_DESCRIPTION + " from "+ TaskDatabaseManager.DATABASE_TABLE + " where "+ TaskDatabaseManager.TASK_DATE + "= '"   + LaunchActivity.selectedDate + "'", null);

我无法正确比较数据库中的两个日期。有关如何比较它们的任何帮助。我的 Android 数据库架构是

  static final String CREATE_QUERY = "CREATE TABLE " + DATABASE_TABLE + "("+KEY_ROWID+" INTEGER PRIMARY KEY AUTOINCREMENT ,"
        + TASK_DESCRIPTION + " VARCHAR(200)  NULL,"+TASK_DATE+ " DATE  Null, "+ TASK_TIMES
        + "  VARCHAR(30)  NULL," + TASK_STATUS + " BOOLEAN DEFAULT FALSE);";
4

2 回答 2

1

我在谷歌论坛上找到了这个:

SQLite 将日期视为字符串。如果您不
使用 ISO-8601 格式 (YYYY-MM-DD HH:MM:SS) 存储日期/时间,则无法比较它们,
因为只有在 ISO-8601 格式下,词法比较才能按预期工作。

于 2013-08-02T12:22:29.797 回答
0

您应该测试您是否Cursor包含任何数据以确定是否为空。在您的情况下,您的表可能不包含行。

if (cursor != null && cursor.moveToFirst()) {
   // is not empty
}
else {
  // is null (problem with SQLiteDatabase) or empty
}

所以现在你知道问题出在哪里了。如果光标为空,问题可能与数据库(不包含行)或您添加到 where 子句的LaunchActivity.selectedDate变量有关。

笔记:

  • 请从您的CREATE_QUERY分号中删除;此符号只会产生问题
  • 不要使用“硬编码”语句,而是使用带有占位符的参数化语句。有语句更安全和人类可读。

例子:

String query = "select * from table where _id = ?";
Cursor c = db.rawQuery(query, new String[] {String.valueOf(id)});
if (c != null && c.moveToFirst()) {
   do {
      // fetch data from Cursor
   } while (c.moveToNext());
}
else {
   // Cursor is null or empty
}
于 2013-08-02T11:15:30.727 回答