我正在通过控制台在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程序中调用此代码时,它不会返回任何输出。 ResultSet
为null
。 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小时或更长时间,那么它正在工作并给我输出。如果我改变间隔< 5小时后,结果集为空。但是,如果我登录到psql服务器并执行查询,因为它在代码中。我正在获得输出。
我正在使用java版本" 1.8.0_151"和PostgreSQL JDBC 4.2驱动程序,42.2.1 - 根据https://jdbc.postgresql.org/download.html - 它是合适的驱动程序。
答案 0 :(得分:0)
PostgreSQL NOW()
函数返回timestamp with time zone
值。为了对timestamp
类型的列使用该值(没有时区),PostgreSQL需要隐式地CAST该值以匹配列类型。但是,测试表明,如果客户端和服务器设置为不同的时区,那么当通过psql连接时,与通过JDBC连接时,CAST的结果可能会有所不同。例如:
服务器时区:UTC
客户所在的时区:America / Denver,a.k.a。" 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查询之前。