首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么不能从JDBC CallableStatement调用返回SETOF的Postgres函数?

为什么不能从JDBC CallableStatement调用返回SETOF的Postgres函数?
EN

Stack Overflow用户
提问于 2017-07-08 03:40:59
回答 1查看 304关注 0票数 3

是否有技术原因不应该使用JDBC CallableStatement来执行返回SETOF (特别是REFCURSOR)的PostgreSQL存储函数?

根据PostgreSQL JDBC文档

不应该通过CallableStatement接口调用作为集合返回数据的函数,而应该使用普通语句或PreparedStatement接口。

除此之外,我还没有看到任何原因,性能,与bug相关的,或者其他原因,为什么您不应该这样做,而且它看起来确实有效。它似乎内在地限制了您可以使用某些函数(特别是那些返回多个结果集的函数)所能做的事情,并且在将过程从另一个数据库移植到PostgreSQL时会受到一些限制。

我对忽略发布此软件的组织发出的公然警告持怀疑态度,但我好奇地想知道更具体的原因。我确实认识到,游标和结果集在一次尝试中从服务器传输到客户端的数据量不同,但这已经被记录为一个缺点。

UPDATE函数的PostgreSQL实现了CallableStatement,将调用字符串的格式转换为select语句。因此,返回SETOF (以及所有函数)的函数的JDBC执行与使用PreparedStatement的方式相同。

JDBC CallableStatement是可以处理输出参数的PreparedStatement。因为返回PostgreSQL函数的SETOF不能包含输出参数,所以CallableStatement不为这些函数提供任何附加功能。尽管如此,PostgreSQL文档并没有阻止对不包括输出参数的函数使用CallableStatement,而且目前似乎没有任何技术原因说明为什么不应该使用CallableStatement

我的一位同事指出,这一警告已经存在了很长时间,因此它似乎是一个设计决定,而不是一个错误。虽然CallableStatement目前正在工作(我怀疑它将继续工作),但不能保证它将来会继续工作,特别是如果这是一个设计决定的话。

EN

回答 1

Stack Overflow用户

发布于 2017-07-10 10:01:31

如果尝试使用CallableStatement检索表函数的结果,则只会得到第一个结果行。

因此,它不会导致错误,但结果可能不是您想要的。因此发出了警告。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44982250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档