java - 从 Java Servlet 调用 Firebird 存储过程

标签 java stored-procedures jdbc firebird jaybird

我有一个带有一些存储过程的 Firebird 数据库,并且我正在开发一个 Java Web/数据库应用程序。我想知道是否可能以及如何从 java 类或 Servlet 调用这些存储过程。

示例:

  1. 存储过程deletep,用于从数据库中删除一行
  2. 我的 web 应用程序 Jsp/servlet
  3. 我想创建一个执行删除存储过程的链接

最佳答案

要在 Java 中执行 Firebird 存储过程,有多种方法。 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(?, ?, ?) .

关于java - 从 Java Servlet 调用 Firebird 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49469467/

相关文章:

java - 连接eclipse和数据库

java - 我正在执行插入排序并在我的 while 循环中获取数组越界异常

java - 基于主机的服务的正确 Kerberos 主体类型

java - 如何从 "referenced"文档ID获取完整的Json

C#。 NPOCO。错误 : "Incorrect syntax near ' &'. " when trying to join

c# - 使用 C# 在 SQL Server 上执行 sql 文件

java - 使用 JVMTI 进行死锁检测

sql - 查看存储过程结果后的自定义结果

java - GlassFish 3.1.1 损坏资源名称,然后提示找不到它

java - 未实现 Postgres 错误方法 org.postgresql.jdbc.PgConnection.createClob()