Return 使用 PreparedStatement 读取 "smalldatetime" 列时额外的“.0”
Return extra ".0" when reading "smalldatetime" column with PreparedStatement
我在 SQL Server
中有一个 table,列类型为 smalldatetime
,我在 table 中使用 PreparedStatement
到 read/write 数据]s。例如我的 table 就像:
| 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
,然后根据此在新创建的Timestamp
上调用toString
GregorianCalendar
。这会导致尾随 .0
.
case CHARACTER: {
...many other conversions...
switch (ssType) {
case DATETIME: // and SMALLDATETIME
{
return (new java.sql.Timestamp(cal.getTimeInMillis())).toString();
}
mssql-jdbc Conversion Code
mssql-jdbc SMALLDATETIME handling
那么mssql-jdbc代码实际执行的是:
System.out.println(new java.sql.Timestamp(100).toString());
> 1970-01-01 00:00:00.1
我在 SQL Server
中有一个 table,列类型为 smalldatetime
,我在 table 中使用 PreparedStatement
到 read/write 数据]s。例如我的 table 就像:
| 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
,然后根据此在新创建的Timestamp
上调用toString
GregorianCalendar
。这会导致尾随 .0
.
case CHARACTER: {
...many other conversions...
switch (ssType) {
case DATETIME: // and SMALLDATETIME
{
return (new java.sql.Timestamp(cal.getTimeInMillis())).toString();
}
mssql-jdbc Conversion Code mssql-jdbc SMALLDATETIME handling
那么mssql-jdbc代码实际执行的是:
System.out.println(new java.sql.Timestamp(100).toString());
> 1970-01-01 00:00:00.1