使用PreparedStatement读取“ smalldatetime”列时返回额外的“ .0”

问题描述 投票:0回答:1

我在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

为什么会这样?

java sql-server prepared-statement smalldatetime
1个回答
1
投票

基础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 Conversion Codemssql-jdbc SMALLDATETIME handling

所以mssql-jdbc代码实际执行的是:

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

> 1970-01-01 00:00:00.1

JavaDoc Timestamp#toString

© www.soinside.com 2019 - 2024. All rights reserved.