java.Statement.executeQuery()创建一个准备好的语句,它不应该

时间:2017-01-17 21:11:51

标签: javascript java postgresql mirth

我有大量代码如下:

conn.createStatement().executeQuery("SELECT a, b, c FROM foo;");

在我的postgres日志中,我看到了很多这样的行:

parse <unnamed>: SELECT a, b, c FROM foo;
bind <unnamed>: SELECT a, b, c FROM foo;
execute <unnamed>: SELECT a, b, c FROM foo;

这是在生产服务器上。

在我的测试服务器上,我看到:

execute <unnamed>: SELECT a, b, c FROM foo;

我希望在生产服务器上看到这一点。

为什么它试图为我的简单选择查询创建一个准备好的语句?

一些背景知识:

  • Mirth 3.4.1,连接到Postgres 9.5
  • 我的测试用例位于数据库阅读器通道中,并且已选中“使用Javascript”。
  • 但是,从日志中可以看出每个查询都是parse / bind / execution。甚至是Mirth的内部查询。

1 个答案:

答案 0 :(得分:1)

是的,PostgreSQL JDBC驱动程序使用扩展协议(parse / bind / execute),除非您强制使用协议版本2.

通常,性能影响很小,因为协议消息往往只包含在一个网络数据包中,而且不应该是一个问题。

我会三思而后行,在强制执行协议版本2之前测试好并对性能差异进行基准测试。这个旧的协议版本不受支持并且开始闻起来很有趣。已经认真考虑删除对它的支持(有关最近的讨论,请参阅this message)。