Оператор закрыт: следующая миграция Oracle 11g

#java #oracle #jdbc #oracle11g #ibatis

#java #Oracle #jdbc #oracle11g #ibatis

Вопрос:

Я переношу приложение с Oracle 10g на Oracle 11g, и у меня возникли проблемы с методом, включенным в «OSubjectsqlmapdao» (приложение использует ibatis 2).

 public List retrieveList(String user, String flag)throws Exception
  {

    try{

      logger.info("Retreving List");
      java.sql.ResultSet rs = null;

      Map map = new HashMap();
      map.put("user",user);
      map.put("flag",flag);
      map.put("listRetrieved",null);

      List listRetrieved = new ArrayList();
      queryForObject("DBListRetrieved",map);
      rs = (java.sql.ResultSet)map.get("listRetrieved");    

      logger.info("HAsmap map "    map.size());

      logger.info("HAsmap map "    map.isEmpty());


      logger.info("listRetrieved  map "    map.get("listRetrieved "));


      logger.info("listRetrieved  map getClass"    map.get("listRetrieved ").getClass());

      OSubject subject = null;
      while (rs.next())
      {       
        subject = new OAsuntos();
        subject.setUser(rs.getString(1));
        subject.setCdode(rs.getString(2));
        subject.setDescrip(rs.getString(3));
        listRetrieved .add(subject );         
      }
      return listRetrieved ;         

    }catch(Exception e){
      logger.error(e.getMessage());
      throw new Exception (e.getMessage());
    }
  }
 

OSubject .xml определяется следующим образом:

 <parameterMap id="parameterMapRetrieveList" class="map"> 
    <parameter property="listRetrieved" javaType="java.lang.Object" jdbcType="ORACLECURSOR" mode="OUT"/>       
    <parameter property="user"        jdbcType="VARCHAR"          javaType="java.lang.String"   mode="IN"/>
    <parameter property="flag"        jdbcType="VARCHAR"          javaType="java.lang.String"   mode="IN"/>
</parameterMap> 


  <procedure id="DBListRetrieved"  parameterMap="parameterMapRetrieveList">
    { ? = call AS.PCK_LIST.F_RetrieveList(?,?)}
  </procedure>
 

Метод отлично работал в Oracle 10g, но он не работает после миграции DDBB. Кроме того, класс списка карт соответствует журналу oracle.jdbc.driver, когда я не использую этот драйвер, и я думаю, что на него не ссылаются или даже не существуют в приложении.

Трассировка журнала:

Список восстановления 2014-06-25 14:54:55,098 ИНФОРМАЦИЯ OSubjectSqlMapDao (OSubjectSqlMapDao .java: 1268) — Карта HAsmap 3 2014-06-25 14:54:55,099 ИНФОРМАЦИЯ OSubjectSqlMapDao (OSubjectSqlMapDao .java: 1270) — Карта HAsmap false 2014-06-25 14:54:55,099 ИНФОРМАЦИЯ OSubjectSqlMapDao ( OSubjectSqlMapDao .java:1273) — Список проверенных картографических оракулов.jdbc.driver.OracleResultSetImpl@4efd9ac2 2014-06-25 14:54:55,100 ИНФОРМАЦИЯ OSubjectSqlMapDao (OSubjectSqlMapDao .java:1276) — Список восстановленной карты getClassclass oracle.jdbc.driver.OracleResultSetImpl 2014-06-25 14:54:55,104 ОШИБКА OSubjectSqlMapDao (OSubjectSqlMapDao .java: 1294) — Оператор закрыт: следующий

Было бы очень полезно, если бы кто-нибудь мог мне помочь. Заранее спасибо.

Комментарии:

1. Я не уверен, как вы получили Resultset , но поскольку его нет Statement в поле зрения, он, вероятно, закрыт, что означает ResultSet , что он также закрыт.

2. Какую банку ojdbc вы используете?

3. @ Mark Rotteveel Результирующий набор является лишь промежуточным объектом для извлечения списка из карты и преобразования результатов в список «Subject». @Lokesh Приложение запущено на Tomcat 7 с установленными на нем ojdbc5 и ojdbc6.

4. Но что queryForObject делать?

5. @Mark Rotteveel Он выполняет процедуру OSubject.xml . Извлеките список как объект и сохраните его на карте как «listRetrieved»