要在 Java 中执行 Firebird 存储过程,有几种方法。 JDBC-default 方法类似于:
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(?, ?, ?)。