0

我有SQL Server一个列类型的表,smalldatetimePreparedStatement用来读/写表中的数据。例如我的桌子是这样的:

|         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

为什么会这样?

4

1 回答 1

1

底层SQL ServerJDBC 驱动程序将返回的字节转换为GregorianCalendarfirst,然后基于 this调用toString新创建的字节。这会导致尾随.TimestampGregorianCalendar.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

于 2019-11-06T08:26:15.033 回答