(没分了,只能到这里问了)java.sql.SQLException: Cursor is closed.

jnkaixin2009 2011-08-19 10:43:32
在java程序中调用存储过程的时候,存储过程返回结果有两个,1个是游标,另一个是一个oResult Out Varchar2 。我在java程序中是这样调用的。


// 返回结果
stat.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
stat.registerOutParameter(7, oracle.jdbc.OracleTypes.VARCHAR);

stat.execute();
System.out.println("=======come aaaaaaaa=========");
result = (ResultSet) stat.getObject(6); System.out.println("=======come bbbbbbbb=========");
while(result.next()){
//数据库返回的游标中的值
flowId = result.getString(1);//流水号
payType = result.getString(2);//支付方式
real_Pay_Value = result.getString(3);//实际充值金额
handling_Charge = result.getString(4);//手续费
check_Day = result.getString(5);//对账日
error_Code = result.getString(6);//支付结果
error_Description = result.getString(7);//错误描述
phone = result.getString(8);//手机号
}

result.close();

当执行到红色部分的时候就报错了,不知道为什么啊,谁能帮我解答一下啊。。。。谢谢了,没分了。
...全文
341 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
oO临时工Oo 2011-08-19
  • 打赏
  • 举报
回复
你可以SQL里执行一下你存储过程的SQL语句,看查询出来的结果是不是为空,如果游标查出来的结果集为空的话,就会自动关闭。
jnkaixin2009 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 trocp 的回复:]
你是不是在存储过程中把游标关闭了?尝试不要关闭。
[/Quote]


这是存储过程




Procedure Pr_Update_Order_Result( iOrder_ID In TB_Pay_Order_Info.Order_Id%Type,
iReal_Pay_Value In TB_Pay_Order_Info.Real_Pay_Value%Type,
iHandling_Charge In Tb_Pay_Order_Info.Handling_Charge%Type,
iPay_Result In TB_Pay_Order_Info.Error_Code%Type,
iError_Description In TB_Pay_Order_Info.Error_Description%Type,
oInfo Out Return_Cursor,
oResult Out Varchar2 ) Is
vSql_Error_Code Integer;
vSql_Error_Message Varchar2( 1024 );
Begin
Begin
Update TB_Pay_Order_Info
Set Error_Code = iPay_Result,
Real_Pay_Value = iReal_Pay_Value,
Handling_Charge = iHandling_Charge,
Error_Description = iError_Description
Where( Order_ID = iOrder_ID );

Open oInfo For
Select Order_ID, Pay_Type, Operate_Value, Real_Pay_Value, Handling_Charge,
Check_Day, Error_Code, Error_Description, Phone
From TB_Pay_Order_Info
Where( Order_ID = iOrder_ID );

oResult := 'PAYDB000';
Exception
When Others Then
Rollback;

vSql_Error_Code := Sqlcode;
vSql_Error_Message := Sqlerrm;

Insert Into Tb_Db_Errors
( ID, Err_Code, Err_Msg, Object_Name, Param )
Values( iOrder_ID, vSql_Error_Code, vSql_Error_Message, 'PK_Pay.Pr_Update_Order_Result',
'iOrder_ID = ' || iOrder_ID || ', ' ||
'iReal_Pay_Value = ' || iReal_Pay_Value || ', ' ||
'iHandling_Charge = ' || iHandling_Charge || ', ' ||
'iPay_Result = ' || iPay_Result );

oResult := 'PAYDB900';
End;

Commit;

Return;
End;
oO临时工Oo 2011-08-19
  • 打赏
  • 举报
回复
你是不是在存储过程中把游标关闭了?尝试不要关闭。

23,405

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧