java - Oracle 上 Linux 与 Windows 数据库查询中的时间戳

标签 java oracle jdbc

我遇到一些遗留代码的奇怪问题。当我在 Windows 中运行它时,这有效,但当我从 Linux 运行它时,它不起作用。

...
ResultSet rs = st.executeQuery("SELECT MODTS from MYTBL WHERE ID = 'X'");
rs.next();
Timestamp ts = Timestamp.valueOf(rs.getString(1));
System.out.println("TS: '" + ts + "'");

PreparedStatement ps = conn.prepareStatement("SELECT * from MYTBL WHERE MODTS = ?");
ps.setTimestamp(1, ts);

System.out.println("FOUND? " + ps.executeQuery().next());

现在,两个环境都连接到同一个数据库,两个环境都打印出 TS 变量的值“2013-03-10 03:35:16.0”。但是,在 Windows 中我得到“FOUND? true”,在 Linux 中我得到“FOUND? false”。

知道这里会发生什么吗?

注意:我知道这不是在这里使用 JDBC 的最佳方式,但这是我无法更改的遗留代码,我正在尝试找出它在一个环境中无法正常工作的原因。

数据库环境是Oracle 11g,使用ojdbc6.jar

编辑:更奇怪的是,这不会发生在所有时间戳上,只会发生在某些时间戳上。我真的不明白这是怎么回事...

最佳答案

好的,我找到了解决方案。这个问题仍然暗示着我,但这至少解决了它。

更改:

ps.setTimestamp(1, ts);

致:

ps.setTimestamp(1, ts, Calendar.getInstance(TimeZone.getDefault()));

关于java - Oracle 上 Linux 与 Windows 数据库查询中的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17171688/

相关文章:

java - JavaBean、POJO和普通类的区别?

java - Java:使用javazoom时控制台停止工作

java - 如何在span下拉菜单中选择元素cssSelector webdriver Java

java - 不允许解析依赖配置 'implementation',因为它被定义为 'canBeResolved=false'

oracle - 如何获取 PL/SQL 对象填充失败的列名

java - 在 2 层和 3 层应用程序中使用表示层的 JDBC 连接

java - 如何使用 Java 将 "2012-03-04 00:00:00.0"转换为格式为 "dd-mm-yyyy HH:mm:ss"的日期

oracle - 如何更改 Oracle BI Publisher 中的日期格式?

java - 安装正确的 Java 后,MacOS 上的 Oracle SQLDeveloper 无法打开

java - JDBC ResultSet 总行数