Для вызова хранимой процедуры в Java используется CallableStatement из пакета java.sql.
Основные шаги:
Connection.
java
CallableStatement: SQL-вызов хранимой процедуры передается в конструктор prepareCall(). Синтаксис вызова зависит от СУБД, но часто имеет вид { call procedure_name(?, ?, ...) }.
java
setXxx(), где Xxx соответствует типу данных (например, setString, setInt).
java
registerOutParameter(), указав индекс параметра и тип данных JDBC.
java
execute(). Если процедура возвращает результирующий набор, можно использовать executeQuery().
java
ResultSet. Если есть выходные параметры, их значения извлекаются методами getXxx().
java
CallableStatement и Connection. Лучше использовать блок try-with-resources.
java
Пример вызова процедуры с входными и возвращаемым значением (через RETURN, а не OUT-параметр, характерно для PostgreSQL/MySQL):
java
Отличия CallableStatement от PreparedStatement:
| Особенность | PreparedStatement | CallableStatement |
|---|---|---|
| Назначение | Выполнение параметризованных SQL-запросов | Вызов хранимых процедур и функций |
| Синтаксис | SQL-запрос с ? | Диалектный синтаксис вызова ({ CALL ... }) |
| Выходные параметры | Нет (только результирующий набор) | Есть (через registerOutParameter) |
| Возвращаемое значение | Только результирующий набор (executeQuery) | Может быть через RETURN (как OUT-параметр), результирующий набор |
Необходимо проверить синтаксис вызова хранимых процедур/функций ({ call ... } или другой) и поддержку типов данных JDBC (Types) для конкретной используемой СУБД.