Лучше ли использовать ResultSet.getString () или ResultSet.getTimestamp (), чтобы получить метку времени? - PullRequest
0 голосов
/ 06 декабря 2018

При получении метки времени из Postgres или Oracle - назовем ее startDate - лучше использовать вызов resultSet.getString("startDate") или resultSet.getTimestamp("startDate")?

В настоящее время я использую resultSet.getString("startDate"), и он работает нормально, но мне пришло в голову, что может быть лучше использовать getTimestamp().

Есть ли признанная лучшая практика?Могут ли быть какие-либо неожиданные последствия использования ResultSet.getString() на отметке времени?

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Лучше ли использовать ResultSet.getString () или ResultSet.getTimestamp () для получения метки времени?

Ни того, ни другого.

Лучше получить дату-time объект, а не строка, так как это лучше представляет, что это значит и означает, и должно лучше подходить для дальнейших операций в программе на Java.

В то же время гораздо лучше использовать современную дату-времяклассы из java.time, чем старомодный Timestamp класс.Последний имеет значительные проблемы с дизайном и долгое время считался устаревшим.

Драйверы JDBC немного отличаются, но посмотрите, можете ли вы получить правильное время в виде Instant, OffsetDateTime или если все остальноене получается, тогда LocalDateTime из вашего набора результатов.Во всех случаях используйте метод с двумя аргументами getObject.Например:

Instant instant = resultSet.getObject("startDate", Instant.class);

JDBC 4.2 указывает, что классы java.time должны поддерживаться таким образом.Я полагаю, что все современные движки баз данных SQL имеют драйверы, совместимые с JDBC 4.2.

Только если вы не можете использовать Java 8 или новее, получите Timestamp, как в вашем коде.Затем используйте версии классов java.time из ThreeTen-Backport и используйте класс DateTimeUtils из ThreeTen-Backport для преобразования вашего Timestamp, лучше всего в en Instant, но если это произойдет, чтобы дать вам неправильный момент из-за проблемы с часовым поясом, тогда LocalDateTimeПример:

Instant instant = 
    DateTimeUtils.toInstant(
        resultSet.getTimestamp("startDate")
    )
;
0 голосов
/ 06 декабря 2018

Я бы использовал resultSet.getTimestamp ().Затем ваш тип данных правильно отображается из кода в базу данных.Вы можете преобразовать этот результат в строку, если хотите.Я не думаю, что вызов метода resultSet.getString () требует затрат времени, но, как правило, более целесообразно получить правильный тип данных.

...