Документация PostgreSQL рекомендует использовать 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
и т. Д.
Есть ли аспекты или различия между методами, которые я пропускаю?В случае использования хранимой процедуры в качестве запроса, что рекомендуется?