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等.