你的写法错了:
stat = con.prepareCall("call mypackage.getarray(?,?)");
改为:
stat = con.prepareCall("{call mypackage.getarray(?,?)}");
stat = con.prepareCall("call mypackage.getarray(?,?)");
改为:
stat = con.prepareCall("{call mypackage.getarray(?,?)}");
解决方案 »
- 请问MyEclipse怎么把右键工程-->new-->页面快捷创建按钮显示出来呢?
- static方法中为什么能通过(实例名.private变量)来使用私有变量??
- weblogic的jms是否优先消费优先级高的消息,如何设置?各位同仁,能否帮帮忙
- 想做JAVA部署工程师要学那些内容
- 如何在Acegi框架下,通过判断用户的权限进行页面转向
- servlet中流的问题
- 页面中的跳转和传值问题
- 文件下载时候 系统找不到指定的路径。
- 一个关于在webwork下的int数据的验证问题?
- resultset的游标可以向前移动吗?为什么我这儿不能移动阿?
- jboss2.2.1 与jdk1.4.2的兼容问题
- JBoss提示以下信息:请问是出了什么问题?如何解决,谢谢各位老大了!
应该用CallableStatement
应该用CallableStatement
CallableStatement stat;
String execProc = "{call mypackage.getarray(?,?)}"; try{
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
con = DriverManager.getConnection("jdbc:odbc:xgLove","xgtest","xgtest"); stat = con.prepareCall(execProc);
stat.registerOutParameter(1, java.sql.Types.VARCHAR);
stat.registerOutParameter(2, java.sql.Types.NUMERIC);
stat.execute(); Array a1 = stat.getArray(1);
Array a2 = stat.getArray(2);
ResultSet rs1 = a1.getResultSet();
ResultSet rs2 = a2.getResultSet();
while(rs1.next()){
rs2.next();
System.out.println(rs1.getString(1));
System.out.println(rs2.getInt(1));
}
rs1.close();
rs2.close();
stat.close();
con.close();
}
catch(Exception e){
e.printStackTrace();
}执行:
java.sql.SQLException: [Oracle][ODBC][Ora]ORA-06550: 第 1 行, 第 7 列:
PLS-00306: 调用 'GETARRAY' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 7 列:
PLS-00306: 调用 'GETARRAY' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
CREATE OR REPLACE PACKAGE "XGTEST"."MYPACKAGE" authid
current_user as
type mobileno is table of varchar2(20);
type usid is table of int;
procedure getarray(mobno out mobileno,uer out usid);
end;
stat.registerOutParameter(1, java.sql.Types.VARCHAR);
stat.registerOutParameter(2, java.sql.Types.NUMERIC);
int i=stat.executeUpdate();
是不是应该是:getArray(?,?)
你确认存储过程的参数是两个吗?
^_^
stat.toInt(2, java.sql.Types.NUMERIC);
试试把这俩个改改
重新描述一下:
我想从Oracle的存储过程返回结果集(不是游标),
定义了一个包(包括存储过程),如下:
CREATE OR REPLACE PACKAGE MYPACKAGE authid
current_user as
type mobileno is table of varchar2(20);
type usid is table of int;
procedure getarray(mobno out mobileno,uer out usid);
end;然后调用时提示:
java.sql.SQLException: [Oracle][ODBC][Ora]ORA-06550: 第 1 行, 第 7 列:
PLS-00306: 调用 'GETARRAY' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 7 列:
PLS-00306: 调用 'GETARRAY' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 7 列:
PL/SQL: Statement ignored
修改这两句:
stat.registerOutParameter(1, java.sql.Types.VARCHAR);
stat.registerOutParameter(2, java.sql.Types.NUMERIC);
没有效果。
而如果存储过程返回的是游标,不调用registerOutParameter也可以成功。
有没有人这样用过!!!!