2016-08-16 12 views
1

У меня возникла проблема с получением поля Clob с использованием java. Так вот что я сделал:Как получить Clob с помощью java

String 
    sql = ("SELECT DBMS_LOB.substr(LDTEXT, 1000) AS TEXT " 
     + "FROM LONGDESCRIPTION "); 

    try (Connection connection = BDOracle.abreConexaoDB2(); 
      Statement statement = connection.createStatement(); 
       ResultSet resultSet = statement.executeQuery(sql); 
      ) { 

     while (resultSet.next()) { 

Он ломает здесь:

  Clob clob = (Clob) resultSet.getClob("TEXT"); 

      long length = clob.length(); 
      String out = clob.getSubString(1, (int) length); 
     }   

    } catch (SQLException err) { 
     System.out.println(err.getMessage()); 
    } 

Exception возвращается:

ERRORCODE = -4461, SQLSTATE = 42815 [СТК] [t4 ] [1092] [11644] [3.53.70] неверное преобразование данных неправильный тип столбца результата для запрошенного преобразования.

Запрос отлично работает в базе данных, я использую DB2.

ответ

1

LDTEXT Предполагая, что является CLOB, DBMS_LOB.SUBSTR() возвратит значение VARCHAR как indicated in the manual. Впоследствии вы должны использовать getString(), а не getClob(), чтобы получить его (и использовать правильное имя столбца - у вас есть TEXT0, а запрос определяет его как TEXT).

+0

Вы были правы! Я изменил код и использовал «getString()», и он отлично работал. Большое спасибо –