用Java调用Oracle存储过程 [英] Calling an Oracle Stored Procedure in Java

查看:57
本文介绍了用Java调用Oracle存储过程的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我如何通过SqlDeveloper执行存储过程的方法

Here's how I'm able to execute my stored procedure through SqlDeveloper

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

输出

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

现在,我正在尝试以Java相同的方式执行存储过程.这是我的代码,我缺少有关输入/输出参数或其数据类型的信息.

Now I'm trying execute the stored procedure the same way but in Java. Here's my code and I'm missing something about the input/output parameters or their datatypes.

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

我想我这里缺少一些基本的东西.有人看到我在哪里失败吗?谢谢.

I think I'm missing something fundamental here. Anyone see where I'm failing? Thanks.

推荐答案

尝试以下操作:

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));
}

注意:由于程序返回 refcursor ,因此需要将 OracleTypes.CURSOR 注册为输出参数.

Note : Since the procedure is returning refcursor, you need to register OracleTypes.CURSOR as output parameter.

要注意的另一件事是,您需要将整个数据集(refcursor)捕获到 Result Set 中,对其进行迭代,然后将提取的值放入 List .

Nother thing to note is you need to catch the whole dataset(refcursor) into Result Set, iterate it and put the extracted value into List.

这篇关于用Java调用Oracle存储过程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆