首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JDBC 調用存儲過程實戰(二):輸出參數綁定與游標處理

     編輯:Java 相關知識

本篇重點講解存儲過程輸出參數的兩類常見場景:返回整數標量值、返回字符串(含游標拼接結果)。掌握 registerOutParameter 與 getXxx 的配合使用是關鍵。

場景一:返回整數輸出參數

存儲過程

alter procedure getsum
    @n int = 0,
    @result int output
as
    declare @sum int, @i int
    set @sum = 0; set @i = 0
    while @i <= @n begin
        set @sum = @sum + @i
        set @i = @i + 1
    end
    set @result = @sum

SQL 測試:declare @myResult int; exec getsum 100, @myResult output; print @myResult

Java 調用

import java.sql.*;

public class ProcedureTest {
    public static void main(String args[]) throws Exception {
        DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
        Connection conn = DriverManager.getConnection("jdbc:odbc:mydata", "sa", "");

        CallableStatement c = conn.prepareCall("{call getsum(?,?)}");
        c.setInt(1, 100);                           // 輸入參數
        c.registerOutParameter(2, java.sql.Types.INTEGER); // 註冊輸出參數類型
        c.execute();                                // 執行

        System.out.println(c.getInt(2));            // 獲取輸出值
        conn.close();
    }
}

場景二:返回字符串(含游標遍歷拼接)

存儲過程(使用游標拼接 orderid)

create procedure CursorIntoProcedure
    @pname varchar(8000) output
as
    declare cur cursor for select orderid from orders
    declare @v varchar(5)
    open cur
    set @pname = ''
    fetch next from cur into @v
    while @@fetch_status = 0 begin
        set @pname = @pname + ';' + @v
        fetch next from cur into @v
    end
    print @pname
    close cur
    deallocate cur

Java 調用

import java.sql.*;

public class ProcedureTest {
    public static void main(String args[]) throws Exception {
        DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
        Connection conn = DriverManager.getConnection("jdbc:odbc:mydata", "sa", "");

        CallableStatement c = conn.prepareCall("{call CursorIntoProcedure(?)}");
        c.registerOutParameter(1, java.sql.Types.VARCHAR); // 註冊 VARCHAR 輸出
        c.execute();

        System.out.println(c.getString(1)); // 獲取拼接字符串
        conn.close();
    }
}

關鍵技術總結

步驟整數輸出字符串輸出
註冊方法registerOutParameter(idx, Types.INTEGER)registerOutParameter(idx, Types.VARCHAR)
獲取方法getInt(idx)getString(idx)
適用類型標量數值、狀態碼、計數文本、JSON、游標拼接結果

注意事項

  • 註冊須在 execute() 前:JDBC 規範要求輸出參數類型在執行前註冊。
  • 類型匹配:Types.INTEGER、Types.VARCHAR、Types.NUMERIC、Types.DATE 等需與數據庫定義一致。
  • 游標性能:存儲過程中使用游標逐行處理效率較低,大數據量建議改用集合操作或應用層分頁查詢。
  • VARCHAR 長度:輸出參數長度受數據庫定義限制(如 varchar(8000)),超長會截斷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved