我在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 Server
JDBC驱动程序首先将返回的字节转换为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