使用预准备语句读取"smalldatetime"列时返回额外的".0"



我在SQL Server中有一个列类型为smalldatetime的表,并且我正在使用PreparedStatement读取/写入表中的数据。E.g我的桌子是这样的:

|         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

为什么会发生这种情况?

底层SQL ServerJDBC驱动程序首先将返回的字节转换为GregorianCalendar,然后在基于该GregorianCalendar新建的Timestamp上调用toString。这会导致后面的CCD_ 11。

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

mssqljdbc转换代码mssql jdbc SMALLDATETIME处理

因此,mssqljdbc代码实际执行的是:

System.out.println(new java.sql.Timestamp(100).toString());
> 1970-01-01 00:00:00.1

JavaDoc时间戳#toString

相关内容

  • 没有找到相关文章

最新更新