【问题标题】:Query with NOW() in criteria behaves differently in psql vs. JDBC在条件中使用 NOW() 进行查询在 psql 与 JDBC 中的行为不同
【发布时间】:2018-07-13 01:44:51
【问题描述】:

我正在通过控制台在 psql 中执行以下查询并获取输出:

select details
  from history_transactions
      ,history_operations
  where history_operations.transaction_id = history_transactions.id
    and type = 3
    and created_at >= NOW() - INTERVAL '5 minutes'

但是,当我从我的 java 程序中调用此代码时,它没有返回任何输出。 ResultSetnull。 PFB 我的代码:

Connection conn = getConnection();
java.sql.Statement stmt = null;
String sql ="select details from  history_transactions , history_operations where  history_operations.transaction_id=history_transactions.id and type =3  and  created_at >= NOW() - INTERVAL '5 minutes'";
try{
    stmt = conn.createStatement();
    rs = stmt.executeQuery(sql);
    while(rs.next()) {
        System.out.println("Inside resultset");
    }
}
catch(Exception e)
{
    e.printStackTrace();
}

知道我哪里出错了吗?

我也没有遇到任何异常。

注意:如果我将时间间隔从 5 分钟更改为 6 小时或更长时间,则它正在工作并给我输出。如果我更改间隔

我正在使用 java 版本“1.8.0_151”和 PostgreSQL JDBC 4.2 驱动程序,42.2.1 - 根据https://jdbc.postgresql.org/download.html - 它是合适的驱动程序。

【问题讨论】:

  • 你的查询是否真的返回了一些东西?
  • 即使查询没有返回任何内容,ResultSet 也不会为空
  • 是的,我的查询返回多行。
  • 事实上 rs.isBeforeFirst() && rs.isAfterLast() 返回错误。我相信这意味着结果集有行?
  • @sweta - 您是否连接到在与本地时区不同的时区运行的 PostgreSQL 服务器?如果是这样,那么 NOW() 可能代表不同的(时区调整的)yyyy-mm-dd ... 值,如果您的 created_at 列不支持时区,则查询可能会产生不同的结果。

标签: java postgresql jdbc psql


【解决方案1】:

PostgreSQL NOW() 函数返回一个 timestamp with time zone 值。为了将该值用于timestamp(无时区)类型的列,PostgreSQL 需要隐式 CAST 该值以匹配列类型。但是,测试表明,如果客户端和服务器设置为不同的时区,则通过 psql 连接与通过 JDBC 连接时 CAST 的结果可能会有所不同。例如:

服务器时区:UTC
客户端时区:美国/丹佛,又名“MST/MDT”,当前为 UTC-7

当通过 psql 连接时,

SELECT CAST(CAST(NOW() AS timestamp) AS varchar)

返回 UTC 值

2018-02-05 22:40:25.012933

但是当通过 JDBC 连接时,相同的查询返回 MST 值

2018-02-05 15:40:57.288587

在JDBC下我们可以执行返回UTC值

set time zone 'UTC'

在运行我们的 SELECT 查询之前。

【讨论】:

    猜你喜欢
    • 2021-09-02
    • 2017-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多