2016-02-09 4 views
0

У меня есть 5k + символов для чтения из каждой строки в Oracle Oracle как CLOB для запроса списка выбора. После выполнения запроса, используя springjdbc, при попытке конвертировать объект CLOB в String исключается нижеследующее исключение.Spring jdbc template connection закрытое исключение при чтении объекта clob

public List<MasterData> findByRqstId(int rqstId) { 

      String sql = "SELECT * FROM MASTER_DATA WHERE REQUEST_ID = ?"; 

      List<MasterData> masterDataList = getSimpleJdbcTemplate().query(sql, 
        ParameterizedBeanPropertyRowMapper.newInstance(MasterData.class), rqstId); 

      return masterDataList; 
     } 



    Caller Code 



    masterDataList = masterDataDao.findByRqstId(rqstId); 
      String outputResponse=null; 

      if (masterDataList != null && masterDataList.size() > 0) { 

       for (MasterData mData : masterDataList) { 
        Clob clob = mData.getOutputResponse(); 
        InputStream in = clob.getAsciiStream(); 
         StringWriter w = new StringWriter(); 
         IOUtils.copy(in, w); 
         String clobAsString = w.toString(); 
        outputResponse = clob.toString(); 

       } 

      } 

Я могу получить объект clob. Но когда я пытаюсь преобразовать объект в строку, используя вышеприведенный код, я получаю закрытое исключение соединения.

Exception in thread "main" java.sql.SQLRecoverableException: Close Connection 
    at oracle.sql.CLOB.getDBAccess(CLOB.java:1421) 
    at oracle.sql.CLOB.getAsciiStream(CLOB.java:352) 

В моем познании, так как объект CLOB больше по размеру кэш не может содержать данные для следующей операции. Следующие свойства не имеют никакого значения.

<property name="connectionProperties" value="defaultRowPrefetch=1000" /> 

    <property name="connectionProperties" value="defaultLobPrefetchSize=500000" /> 
+0

Проблема в том, что к моменту доступа к clob соединение, которое его создало, уже закрыто. Вы должны сделать это в картографе, который вы передаете шаблону JDBC. Замечание: вы уверены, что вам нужно использовать 'getAsciiStream', а не' getCharacterStream'? –

ответ

0

Я могу получить объект CLOB по convering как Струнный тип данных .Internally Я думаю Spring заботится о преобразовании, но его рабочей штрафа.

 Смежные вопросы

  • Нет связанных вопросов^_^