【发布时间】:2011-11-19 10:12:21
【问题描述】:
PostgreSQL documentation 建议使用CallableStatement 来调用存储过程。
对于返回rowset的存储过程,使用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 等。
我缺少的方法之间是否存在方面或差异?在存储过程用作查询的情况下,推荐哪种方式?
【问题讨论】:
标签: postgresql stored-procedures jdbc prepared-statement callable-statement