Возвращать лишние ".0" при чтении столбца "smalldatetime" с PreparedStatement - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть таблица в SQL Server с типом столбца smalldatetime, и я использую PreparedStatement для чтения / записи данных в моих таблицах. Например, моя таблица выглядит так:

|         date           |
+------------------------+
|   2019-11-06 09:48:00  +
|   2019-11-05 07:04:00  +
|         ...            +
+------------------------+

, и я читаю столбец date с:

String date = rs.getString("date");

И я получаю дополнительный .0 в конце даты:

2019-11-06 09:48:00.0
2019-11-05 07:04:00.0

Почему это происходит?

1 Ответ

1 голос
/ 06 ноября 2019

Базовый драйвер SQL Server JDBC сначала преобразует возвращаемые байты в GregorianCalendar, а затем вызывает toString на вновь созданном Timestamp на основе этого GregorianCalendar. Это приводит к завершению .0.

case CHARACTER: {
  ...many other conversions...
  switch (ssType) {
    case DATETIME: // and SMALLDATETIME
    {
      return (new java.sql.Timestamp(cal.getTimeInMillis())).toString();
    }

mssql-jdbc Код преобразования mssql-jdbc SMALLDATETIME обработка

Так, что mssql-Код JDBC, который фактически выполняется:

System.out.println(new java.sql.Timestamp(100).toString());

> 1970-01-01 00:00:00.1

Метка времени JavaDoc # toString

...