按日期和时间在Android中排序的SQLite无法正常工作

时间:2019-05-24 13:48:26

标签: java android sqlite

我目前正在为android开发一个应用程序,并且试图获取数据库中的最后一个条目,该条目由包含日期和时间的String的列排序。

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

我已经尝试按“日期”,“日期时间”以及“ 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 +02:00”

2 个答案:

答案 0 :(得分:1)

不是将日期保存为字符串,而是将所述日期转换为1970年1月1日以来的毫秒数是一个好主意。这样,排序非常简单,比较数字的效率更高。然后,您可以在查询数据时将毫秒转换为格式化的日期。

答案 1 :(得分:0)

尝试一下:

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

我建议您将DATETIME DEFAULT CURRENT_TIMESTAMP用作您的DATETIME列类型。每当您插入或更新行时,都会自动更新DATETIME