You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 8通过Connector/J查询MySQL 8.0两时间戳范围数据无返回问题

问题排查与解决方案

核心错误点

你代码中存在明确的参数类型传参错误:
你已经通过geTime、leTime两个long类型时间戳构造了geStamp、leStamp两个java.sql.Timestamp对象,但调用setTimestamp方法时传入的却是long类型的geTime、leTime,而非构造好的Timestamp对象。
PreparedStatement的setTimestamp方法第二个参数要求必须是java.sql.Timestamp类型,传入long类型会导致参数绑定失败,最终查询条件不匹配返回空结果。
修正后的参数绑定代码如下:

stmt.setInt(1, perId);
// 传入构造好的Timestamp对象,而非long类型的原始时间戳
stmt.setTimestamp(2, geStamp);
stmt.setTimestamp(3, leStamp);

其他可选排查点

如果修正上述问题后仍未解决,可以依次检查以下项:

  • 时区不一致问题:JDBC连接的默认时区和MySQL服务端、Workbench使用的时区不一致,会导致datetime类型的参数隐式转换时出现时间偏移,最终查询条件不匹配。可以在JDBC连接串中明确指定时区,例如添加参数serverTimezone=Asia/Shanghai(替换为你实际使用的时区即可)
  • 事务隔离级别问题:你插入测试数据的会话未提交事务,JDBC连接使用默认的可重复读隔离级别时,无法读到未提交的数据
  • 参数值校验:执行查询前打印perId、geStamp、leStamp的实际值,和Workbench中执行的查询参数做对比,确认参数值符合预期
  • 连接环境校验:确认mySqlConn连接的是和Workbench相同的库、表环境,避免连错测试/生产环境导致查询无结果

内容的提问来源于stack exchange,提问作者TSwanson9411

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:54:04