Выполнить хранимую процедуру Firebird на Java можно несколькими способами. Метод JDBC по умолчанию будет выглядеть примерно так:
try (CallableStatement cstmt = connection.prepareStatement(
"{call yourProcedure(?, ?, ?)}")) {
cstmt.setString(1, "value1");
cstmt.setString(2, "value2");
cstmt.setString(3, "value3");
cstmt.execute();
}
Если бы хранимую процедуру Firebird можно было выбрать (то есть: содержит SUSPEND
и может возвращать несколько строк), вам нужно будет сделать что-то вроде:
try (CallableStatement cstmt = connection.prepareStatement(
"{call yourProcedure(?, ?, ?)}")) {
cstmt.setString(1, "value1");
cstmt.setString(2, "value2");
cstmt.setString(3, "value3");
try (ResultSet rs = cstmt.executeQuery()) {
while(rs.next()) {
// do something with result set rows ...
}
}
}
Этого достаточно, если хранимая процедура является исполняемой и не возвращает никаких значений. Если хранимая процедура является исполняемой с (несколькими) возвращаемыми столбцами, вам потребуется что-то вроде:
try (CallableStatement cstmt = connection.prepareStatement(
"{call yourProcedure(?, ?, ?, ?, ?)}")) {
cstmt.setString(1, "value1");
cstmt.setString(2, "value2");
cstmt.setString(3, "value3");
cstmt.registerOutParameter(4, Types.VARCHAR);
cstmt.registerOutParameter(5, Types.VARCHAR)
cstmt.execute();
String out1 = cstmt.getString(4);
String out2 = cstmt.getString(5);
// do something with result
}
В качестве альтернативы вы можете использовать специальный синтаксис Firebird EXECUTE PROCEDURE yourProcedure(?, ?, ?)
для исполняемых хранимых процедур и SELECT * FROM yourProcedure(?, ?, ?)
.
person
Mark Rotteveel
schedule
25.03.2018