SQLite в андроиде по дате и времени не работает - PullRequest
0 голосов
/ 24 мая 2019

В настоящее время я разрабатываю приложение для 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);

Результат, который я получаю

"Чт 23 мая 15:34:58 GMT + 02: 00 2019"

но я должен получить

"Чт 23 мая 15:56:32 GMT +02:00 2019 "

Ответы [ 2 ]

1 голос
/ 24 мая 2019

Вместо сохранения даты в виде строки рекомендуется преобразовать указанную дату в миллисекунды с 1 января 1970 года. Таким образом, сортировка выполняется очень просто, а сравнение чисел более эффективно. Затем, по запросу данных, вы можете преобразовать миллисекунды в форматированную дату.

0 голосов
/ 24 мая 2019

Попробуйте это:

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

И у меня есть предложение, чтобы вы использовали DATETIME DEFAULT CURRENT_TIMESTAMP в качестве типа DATETIME столбца. Это автоматически обновляет DATETIME каждый раз, когда вы вставляете или обновляете строку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...