Назад к вопросам
Junior
70
questionbank
Как можно вызвать хранимую процедуру?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Для вызова хранимой процедуры можно использовать java.sql.CallableStatement.
Основные шаги:
- Получить соединение с базой данных (
Connection). - Создать
CallableStatementс использованием синтаксиса JDBC для вызова хранимых процедур. - Установить входные параметры (если они есть).
- Зарегистрировать выходные параметры (если они есть) с указанием их типа данных.
- Выполнить вызов с помощью
execute()илиexecuteUpdate(). - Получить значения выходных параметров (если они есть).
- Обработать
ResultSet(если процедура возвращает набор результатов). - Закрыть ресурсы (
CallableStatement,Connection).
Пример вызова процедуры без параметров:
// Предполагаем, что connection уже установлено
try (CallableStatement stmt = connection.prepareCall("{call my_procedure()}")) {
stmt.execute();
} catch (SQLException e) {
e.printStackTrace();
}
Пример вызова процедуры с входным и выходным параметрами:
// Предполагаем, что connection уже установлено
int inputId = 10;
String outputName = null;
try (CallableStatement stmt = connection.prepareCall("{call get_user_name(?, ?)}")) {
stmt.setInt(1, inputId); // Устанавливаем входной параметр
stmt.registerOutParameter(2, java.sql.Types.VARCHAR); // Регистрируем выходной параметр
stmt.execute(); // Выполняем вызов
outputName = stmt.getString(2); // Получаем значение выходного параметра
System.out.println("User name: " + outputName);
} catch (SQLException e) {
e.printStackTrace();
}
Пример вызова процедуры, возвращающей ResultSet:
// Предполагаем, что connection уже установлено
try (CallableStatement stmt = connection.prepareCall("{call get_all_users()}");
ResultSet rs = stmt.executeQuery()) { // Используем executeQuery для процедур, возвращающих ResultSet
while (rs.next()) {
// Обрабатываем строки resultado, например:
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println("ID: " + id + ", Name: " + name);
}
} catch (SQLException e) {
e.printStackTrace();
}
Важно использовать правильный синтаксис вызова для конкретной СУБД и JDBC драйвера. Общий формат: {call procedure_name(param1, param2, ...)}.