微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

postgresql – 存储过程作为查询:CallableStatement vs. PreparedStatement

PostgreSQL documentation建议使用 CallableStatement调用存储过程.

在返回行集的存储过程的情况下,使用CallableStatement有什么区别?

String callString = "{ call rankFoos(?,?) }";
CallableStatement callableStatement = con.prepareCall(callString);
callableStatement.setString(1,fooCategory);
callableStatement.setInt(2,minimumRank);
ResultSet results = statement.executeQuery();

并使用正规PreparedStatement

String queryString = "SELECT FooUID,Rank FROM rankFoos(?,?);";
PreparedStatement preparedStatement = connection.prepareStatement(queryString);
preparedStatement.setString(1,fooCategory);
preparedStatement.setInt(2,minimumRank);
ResultSet results = statement.executeQuery();

据了解,CallableStatement提供了一种语言无关的调用存储过程的方式.这对我来说并不重要,因为我知道我在使用Postgresql.据我所见,使用PreparedStatement的明显优势是一个更通用的查询,将存储过程视为表,可以使用WHERE,JOIN,ORDER BY等.

在我缺少的方法之间是否有方面或差异?在使用存储过程作为查询的情况下,哪些是推荐的?

我很确定第二种方法根本不符合一些RDBMS的功能,但是由于您只需要使用Postgresql,这并不重要.对于你的简单情况,真的没有太多的缺点.有两个问题我可以看到弹出来:

>根据存储过程的写入方式,可能需要注册参数才能执行该过程.这是不可能的,准备好的声明.如果您控制存储过程的创建和调用代码,您可能不必担心这一点.>它首先限制了调用存储过程的有效性.存储过程的主要优点之一是将查询逻辑封装在数据库级别.这样您可以调整查询,或者在某些情况下添加功能,而无需更改代码.如果您计划添加where子句连接到存储过程调用的结果,那为什么不把原始查询放在java层中?

原文地址:https://www.jb51.cc/postgresql/192603.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐