[英]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.