【问题标题】:Wrong result with SQL Server PreparedStatement in JavaJava 中 SQL Server PreparedStatement 的错误结果
【发布时间】:2011-10-25 15:24:59
【问题描述】:

我有疑问:

select * from db where timeColumn >= ?

然后我使用准备语句:

PreparedStatement statement = connection.prepareStatement(sql);
statement.setDate(index, new java.sql.Date(((Date) param).getTime()));

Microsoft 驱动程序结果不正确,resultSet 包含从一天开始的行,忽略请求的小时/分钟等。

怎么了?

【问题讨论】:

    标签: java sql-server jakarta-ee prepared-statement


    【解决方案1】:

    结果是正确的:您正在使用 setDate() 和 java.sql.Date,其中仅包含年、月和日,而不是 setTimestamp() 和 java.sql.Timestamp,其中还包含时间部分

    例如:

    新 java.sql.Timestamp(新 java.util.Date().getTime())

    【讨论】:

      【解决方案2】:

      答案来自java.sql.Date的javadoc:

      为了符合 SQL DATE 的定义,毫秒值由一个 java.sql.Date 实例必须通过设置小时、分钟、秒和 在与实例关联的特定时区中毫秒到零。

      换句话说,java.sql.Date 将具有小时、分钟和秒字段,但它们将始终设置为零。

      您应该改用java.sql.Timestamp

      【讨论】:

        【解决方案3】:

        尝试使用 statement.setTimestamp(index, new java.sql.Timestamp(((Date) param).getTime()));

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-09-03
          • 2019-01-14
          • 1970-01-01
          • 2014-06-28
          • 2017-11-30
          • 1970-01-01
          • 1970-01-01
          • 2018-06-07
          相关资源
          最近更新 更多