簡體   English   中英

從Java Servlet調用Firebird存儲過程

[英]Calling Firebird Stored procedure from Java Servlet

我有一個帶有某些存儲過程的Firebird數據庫,並且正在開發Java Web /數據庫應用程序。 我想知道是否有可能,以及如何從Java類或Servlet調用那些存儲過程。

例:

  1. 存儲過程deletep ,用於從數據庫中刪除行
  2. 我的webapp Jsp / servlet
  3. 我想創建一個執行我的刪除存儲過程的鏈接

要用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(?, ?, ?)

使用Firebird JDBC驅動程序Jaybird可以做到這一點。

三個步驟:

  1. 創建一個DBUtil Java類以存儲查詢:

     public static void deletePlan(Connection conn, CallableStatement statement, String code, String rev, String mention) throws SQLException { statement.setString(1, code); statement.setString(2, rev); statement.setString(3, mention); statement.execute(); } 
  2. 創建刪除servlet

     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Connection conn = MyUtils.getStoredConnection(request); String code = request.getParameter("code"); String rev = request.getParameter("revision"); String mention = request.getParameter("mention"); CallableStatement statement = null; try { statement = conn.prepareCall("execute procedure DELETEP(?,?,?)"); } catch (SQLException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } String errorString = null; try { DBUtils.deletePlan(conn, statement, code, rev, mention); } catch (SQLException e) { e.printStackTrace(); errorString = e.getMessage(); } ......... 
  3. 在jsp文件中創建刪除鏈接

     <a href="${pageContext.request.contextPath}/deletePlan code=${plan.code}&revision=${plan.revision}&mention=${plan.mention}">Delete</a> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM