gpt4 book ai didi

java - 使用PreparedStatement读取 ".0"列时返回额外的 "smalldatetime"

转载 作者:行者123 更新时间:2023-12-02 09:20:34 25 4
gpt4 key购买 nike

我在 SQL Server 中有一个表,其列类型为 smalldatetime,并且我正在使用 PreparedStatement 读取/写入表中的数据。例如我的 table 是这样的:

|         date           |
+------------------------+
| 2019-11-06 09:48:00 +
| 2019-11-05 07:04:00 +
| ... +
+------------------------+

我正在阅读日期专栏:

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

JavaDoc Timestamp#toString

关于java - 使用PreparedStatement读取 ".0"列时返回额外的 "smalldatetime",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58725508/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com