【问题标题】:jdbc postgres select avg() query takes very long to execute and returns nulljdbc postgres select avg() 查询需要很长时间才能执行并返回 null
【发布时间】:2015-07-17 13:20:00
【问题描述】:

我正在尝试使用 java 从我的 postgresql 数据库中获取列的平均值。 这是查询:

select cast(avg(qtime) as varchar) as average from es_logger where qdate >= '07-JUL-15 10:00:00' and qdate < '07-JUL-15 11:00:00' and ip = 'x.x.x.x'

此查询在 postgresql 控制台中执行大约 100 毫秒,但从我的 java 代码调用时执行和返回需要将近 10 秒。

这里是sn-p的代码:

ps = con.prepareStatement(sql);
rs = ps.executeQuery();
rs.next();
String d = rs.getString(1);

此外,这个查询在 java 中总是返回 null 而它在 postgresql 控制台中给出了正确的答案。

我已尝试从我的代码中运行其他 select 查询,它们运行良好。

有人可以帮我解释为什么会发生这种情况吗?

编辑:我将 Java 1.7_51 与 postgresql 9.2 和驱动程序 postgresql-9.1-901.jdbc4.jar 一起使用

【问题讨论】:

  • 能否贴出JDBC在服务器上执行的实际查询。
  • @RomanC 我怎样才能找到那个?
  • 如果你打印语句代码,那是已经准备好的或者使用了一些 JDBC 日志工具。
  • 我在问题中发布的查询是我打印ps 对象时得到的查询。
  • 为什么要将数字转换为 varchar?如果没有行满足where 条件,avg() 将返回 null。 select count(*) from es_logger where qdate &gt;= '07-JUL-15 10:00:00' and qdate &lt; '07-JUL-15 11:00:00' and ip = 'x.x.x.x' 返回什么?

标签: java postgresql select jdbc average


【解决方案1】:

终于弄明白了。

事实证明:

1) 响应时间长是数据库问题。相同的查询在不同的 postgresql 数据库上运行得非常快。

2) 返回空值是因为我将时间戳参数作为字符串传递。只需按照here 的建议将其作为时间戳传递即可。

【讨论】:

    猜你喜欢
    • 2018-07-06
    • 1970-01-01
    • 2016-04-22
    • 2021-12-25
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 2014-07-21
    • 1970-01-01
    相关资源
    最近更新 更多