Ответ
Да, параметры в CallableStatement передаются и регистрируются явно. В отличие от обычного Statement, CallableStatement работает с параметризованными вызовами хранимых процедур и функций.
Типы параметров и работа с ними:
| Тип параметра | Установка значения | Регистрация | Получение результата |
|---|---|---|---|
| IN (входной) | setXXX(int parameterIndex, XXX value) |
Не требуется | Не требуется |
| OUT (выходной) | Не требуется | registerOutParameter(...) |
getXXX(...) после execute() |
| INOUT (входно-выходной) | setXXX(...) |
registerOutParameter(...) |
getXXX(...) после execute() |
Пример вызова процедуры с IN и OUT параметрами:
String sql = "{call get_employee_name(?, ?)}"; // SQL-вызов процедуры
try (CallableStatement stmt = connection.prepareCall(sql)) {
// Установка IN-параметра (ID сотрудника)
stmt.setInt(1, 101);
// Регистрация OUT-параметра (Имя сотрудника)
stmt.registerOutParameter(2, Types.VARCHAR);
stmt.execute(); // Выполнение вызова
// Получение значения OUT-параметра
String employeeName = stmt.getString(2);
System.out.println("Employee: " + employeeName);
}
Важно: Параметры индексируются с 1. Порядок должен соответствовать объявлению в хранимой процедуре.