【问题标题】:SQLite in android order by date and time not workingandroid中按日期和时间排序的SQLite不起作用
【发布时间】:2019-05-24 23:17:17
【问题描述】:

我目前正在为 android 开发一个应用程序,我正在尝试让我的数据库中的最后一个条目按包含日期和时间的字符串的列排序。

我的问题是查询的结果总是第一个日期而不是最后一个。

我已经尝试按“日期”、“日期时间”以及“DESC”和“ASC”对我的专栏进行排序。

以下是创建包含相关日期的表的查询

private static final String CREATE_TABLE_TIMBRAGE="CREATE TABLE "
            + TABLE_TIMBRAGE + "(" + COLUMN_T_TIMBRAGE_PK_TIMBRAGE + " INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE NOT NULL, "
            + COLUMN_T_TIMBRAGE_DATETIMBRAGE + " DATETIME NOT NULL, " + COLUMN_T_TIMBRAGE_INOUT + " INT NOT NULL, "
            + COLUMN_T_TIMBRAGE_FK_EMPLOYE + " INT NOT NULL, "+ "FOREIGN KEY(" + COLUMN_T_TIMBRAGE_FK_EMPLOYE + ") REFERENCES " + TABLE_EMPLOYE + "("+COLUMN_T_EMPLOYE_PK_EMPLOYE+") "

这是我的日期格式化程序

SimpleDateFormat FORMATTER=new SimpleDateFormat("dd.MM.yyyy'-'HH:mm:ss", Locale.FRANCE);

这是我添加到此表中的方式

ContentValues values = new ContentValues();
        values.put(COLUMN_T_TIMBRAGE_DATETIMBRAGE, FORMATTER.format(timbrage.getDateTimbrage()));
        values.put(COLUMN_T_TIMBRAGE_INOUT, timbrage.getInOut());
        values.put(COLUMN_T_TIMBRAGE_FK_EMPLOYE, timbrage.getFK_Employe());

        SQLiteDatabase db = this.getWritableDatabase();
        db.insert(TABLE_TIMBRAGE, null, values);
        db.close();

最后这是我的查询,应该得到最后一个条目

String query2 = "Select * FROM " + TABLE_TIMBRAGE + " WHERE " + COLUMN_T_TIMBRAGE_FK_EMPLOYE + " =  \"" + FK_Employe + "\"" + " ORDER BY datetime("+ COLUMN_T_TIMBRAGE_DATETIMBRAGE +") ASC LIMIT 1 ";
                Cursor cursor2 = db.rawQuery(query2, null);

我得到的结果是

“2019 年 5 月 23 日星期四 15:34:58 GMT+02:00”

但我应该得到

“2019 年 5 月 23 日星期四 15:56:32 GMT+02:00”

【问题讨论】:

  • 把日期格式改成:yyyy.MM.dd'-'HH:mm:ss或者类似的,因为你使用的格式没有可比性。 SQLite 对日期一无所知,因此它将所有内容都视为 TEXT。
  • 如果您使用date and time functions 支持的格式之一,您将获得对时间戳进行有意义排序的额外奖励。

标签: java android sqlite


【解决方案1】:

与其将日期保存为字符串,不如将日期转换为自 1970 年 1 月 1 日以来的毫秒数。这样,​​排序非常简单,比较数字更有效。然后,您可以在查询数据时将毫秒转换为格式化的日期。

【讨论】:

    【解决方案2】:

    试试这个:

    SELECT  * FROM  + YOUR_TABLE_NAME +  ORDER BY + YOUR_DATETIME_COLUMN_NAME + DESC
    

    我有一个建议,您应该使用DATETIME DEFAULT CURRENT_TIMESTAMP 作为您的DATETIME 列类型。这会在您插入或更新行时自动更新 DATETIME

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-17
      • 1970-01-01
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      相关资源
      最近更新 更多