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
私が見逃している方法の間に側面や違いはありますか? ストアド プロシージャをクエリとして使用する場合、どれが推奨されますか?