#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»