没有得到任何结果Cursor

时间:2013-08-02 11:13:12

标签: android sqlite simplecursoradapter

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);";

2 个答案:

答案 0 :(得分:1)

我在Google论坛上发现了这个:

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

答案 1 :(得分:0)

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

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

所以现在你知道问题出在哪里了。如果Cursor为空,则可以使用数据库(不包含任何行)或使用 LaunchActivity.selectedDate 变量添加到where子句。

说明:

  • 请从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
}