当前位置:首页
开发技术指南» 文章正文
    引言:

 ·在vb中调用sql存储过程的问题    »显示摘要«
    摘要: 现有一数据库a;其表为st_rnfl_r0 表的结构及记录如下: stcdt ymdhm dtrn xh03 2004-12-01 00:00:00.000 2.0 xh04 2004-12-02 00:00:00.000 3.0 xh02 2004-12-02 00:00:00.000 0.1 xh01 2004-12-03 00:00:00.000 8.1 xh......
    摘要: 小弟大学毕业一个半月了, 目前在家(没有去找过工作)。 想找个软件,或者程序相关的工作,如没有,实习也可以。 简要信息如下: 非计算机系,全靠自学。 大三通过高级程序员(软考)。 会的语言主要有:c c++ java c# 。。。 想找份相关的工作, 或者如果不行的话,试用,实习,学习都可以。 地点在杭州或者苏州(我是浙江的,离那近点) 如果有哪位大哥,或者公司想找员工,或者实习生,或者其......


一个游标自动关闭的问题,是不是JDBC设置有关,,求教

SERVELT里面CALL了一个ORACLE的PROCEDURE,返回一个游标的结果集,并把这个游标结果集赋予RESULT对象RS,当我在JSP页面里WHILE(RESULT.NEXT)的时候系统总是说ERROR:500   结果集已关闭   :next。不知道这个游标怎么会自动关闭的,我在PROCEDURE和SERVELT里面没有任何游标关闭的语句啊。附关键代码:PROCEURE  
  /********************************************************************  
  用途:查询特殊交易维护控制表记录  
  ********************************************************************/  
        PROCEDURE   proc_etrade_maintain_select   (  
              p_i_areano             IN               VARCHAR2,  
              p_i_tradecode       IN               VARCHAR2,  
              p_o_retcode           OUT             VARCHAR2,  
              p_o_retmsg             OUT             VARCHAR2,  
              p_o_retcur             OUT             outcur  
        )  
        IS  
              v_l_sql           VARCHAR2   (1000);  
              n_l_first       NUMBER   (1);  
        BEGIN  
              p_o_retcode   :=   00;  
              p_o_retmsg   :=   处理成功;  
              n_l_first   :=   1;  
              v_l_sql   :=   select   *   from   P_FW_etrade_maintain   ;  
   
            OPEN   p_o_retcur  
                FOR   v_l_sql;  
        EXCEPTION  
              WHEN   OTHERS  
              THEN  
                    p_o_retcode   :=   SQLCODE;  
                    p_o_retmsg   :=   查询特殊交易维护控制表记录失败,原因:   ||   SQLERRM;  
        END   proc_etrade_maintain_select;  
   
  servelt:  
  public   ResultSet   findByKey(String   areano,String   tradecode,   String[]   opMessage)   {  
          int     i_areano=1;  
          int     i_tradecode   =2;  
          int     o_retcode=3;  
          int     o_retmsg=4;  
          int     o_retcur=5;  
          Connection   conn   =   null;  
          CallableStatement   cs   =   null;  
          ResultSet   rs   =   null;  
          opMessage[1]   =   "queryETradeMaintain";  
          //数据操作  
          try   {  
              conn   =   ds.getConnection();  
              cs   =   conn.prepareCall("{call   pack_p_fw_etrade_maintain.proc_etrade_maintain_select(?,?,?,?,?)}");  
   
              cs.setString(i_areano,   areano);  
              cs.setString(i_tradecode,   tradecode);  
              cs.registerOutParameter(o_retcode,   Types.VARCHAR);  
              cs.registerOutParameter(o_retmsg,   Types.VARCHAR);  
              cs.registerOutParameter(o_retcur,   OracleTypes.CURSOR);  
   
              cs.execute();  
   
              opMessage[0]   =   "特殊交易维护控制   :   返回代码:"   +   cs.getString(o_retcode)  
                      +";返回信息:"   +   cs.getString(o_retmsg);  
   
              rs   =   (ResultSet)   cs.getObject(o_retcur);  
          }  
          catch   (SQLException   se)   {  
              System.err.println("特殊交易维护控制   :   获取参数时出错-->"   +   se.getMessage());  
              return   null;  
          }  
          //操作结束后的清理工作  
          finally   {  
              try   {  
                  if   (cs   !=   null){  
                      cs.close();  
                  }  
                  if   (conn   !=   null)   {  
                      conn.close();  
                  }  
              }  
              //清理工作出现异常  
              catch   (SQLException   se)   {  
                  System.err.println("特殊交易维护控制   :   获取参数后,关闭时出错-->"   +   se.getMessage());  
                  return   null;  
              }  
          }  
          return   rs;  
      }  
  上面的SERVELT里RETURN   RS后,这个RS是关闭的,请问要怎么打开,为什么会关闭。谢谢!

NO.1   作者: laughsmile

你的cs与conn都关闭了,return之后,resultset肯定关闭了

NO.2   作者: tanghuan

实际上RS只是一个取结果集的上下文罢了  
  CONNECT只是数据库连接的上下文罢了

NO.3   作者: humanity

ResultSet   ,   Statement   ,   关闭了之后相关联产生的都会关闭。  
  ResultSet   不可能在一个   Statement   关闭之后还处于打开状态。  
   
  你只有在关闭之前取出所有数据,因为   Statement   关闭了就意味着   数据库不理会你了。

NO.4   作者: wingtrace

ResultSet依赖于Connection,弄明白这一层关系你的问题就好解决了。  
   
  ResultSet并不会一次性地把查询得到的记录全部从DB取回到本地内存,而是每次只取一批,要用到下一批数据的时候再次通过Connection到DB获取。Connection关闭之后,ResultSet的存在是没有意义的。


 ·如何获得计算机有几个串口    »显示摘要«
    摘要: 如何获得计算机有几个串口,并且将其逐一显示出来以供选择 ......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE