簡體   English   中英

在 Java 中調用 Oracle 存儲過程

[英]Calling an Oracle Stored Procedure in Java

這是我如何通過 SqlDeveloper 執行我的存儲過程

var p refcursor;
exec DMG.Getstudentids(12342343,:p);
print p;

輸出

P
-----------
STUDENT_ID
-----------
23432425
54353455

現在我正在嘗試以相同的方式執行存儲過程,但是在 Java 中。 這是我的代碼,我缺少有關輸入/輸出參數或其數據類型的信息。

Connection connection = DriverManager.getConnection(url, user, pass);
CallableStatement cs = connection.prepareCall("{call DMG.Getstudentids(?,?)}");
cs.setFloat(1, 12342343);
cs.registerOutParameter(2, Types.OTHER);
cs.execute();
List<Integer> result = (List<Integer>) cs.getArray(2);

我收到以下錯誤

java.sql.SQLException: Invalid column type: 1111

我想我在這里遺漏了一些基本的東西。 有人看到我失敗的地方嗎? 謝謝。

嘗試以下操作:

Connection connection = DriverManager.getConnection(url, user, pass);
CallableStatement cs = connection.prepareCall("{call DMG.Getstudentids(?,?)}");
cs.setFloat(1, 12342343);
cs.registerOutParameter(2, OracleTypes.CURSOR);
cs.executeQuery();
ResultSet resultSet=cs.getObject(1);
List<Integer> result = new ArrayList<Integer>();
while(resultSet.next()){
 result.add(resultSet.getInt(STUDENT_ID));
}

Note :由於procedure返回refcursor ,您需要將OracleTypes.CURSOR注冊為輸出參數。

另一件需要注意的事情是您需要將整個數據集(refcursor)捕獲到Result Set ,對其進行迭代並將提取的值放入List

暫無
暫無

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

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