2016-11-15 2 views
2

Я пытаюсь вставить данные в виде CLOB в Oracle Database и код, я использую для вставки, как показано ниже:Попытка setClob() В JDBC, чтобы вставить строку в базу данных Oracle

Connection connection = getConnection(); 
    PreparedStatement ps = null; 
    try 
    { 
     System.out.println("datra i retrive is : " + status + " " + operationType + " " + errorLog + " " + clipBoardId); 
     int i = 0; 
     ps = connection.prepareStatement(SQL_CODELIST_BATCH_UPDATE); 
     ps.setString(++i, status); 

     /*ByteArrayInputStream inputStream = new ByteArrayInputStream(errorLog.getBytes()); 
     InputStreamReader inputStreamReader = new InputStreamReader(inputStream);*/ 

     Clob clob = (java.sql.Clob)oracle.sql.CLOB.createTemporary(
        connection, false, oracle.sql.CLOB.DURATION_SESSION); 
     clob.setString(1, errorLog); 

     ps.setClob(++i, clob); 
     ps.setString(++i, operationType); 
     ps.setString(++i, clipBoardId); 
     ps.executeUpdate(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
    finally 
    { 
     close(ps); 
     close(connection); 
    } 

и если г пытаюсь вставить выше кода в методе setClob() его дает исключение, как показано ниже:

java.lang.ClassCastException: $ Proxy43 не может быть приведен к oracle.jdbc.OracleConnection

в oracle.sql.CLOB. createTemp orary (CLOB.java:676)

на oracle.sql.CLOB.createTemporary (CLOB.java:640)

И если я пытаюсь создать CLOB ниже

Clob clob = connection.createClob() 

и установив значение строки как

clob.setString(1, "test code"); 

и он застрял в createClob();

+0

В какой среде вы запускаете свой код, например. в Томкате? Как создать или получить соединение с базой данных? – Codo

+0

Что вы подразумеваете под "stucking at createClob()"? Это крушение? Разве это не компилируется? Или код зависает, т. Е. Не продолжать выполнение? – Codo

+0

stucking означает, что после createClob() он будет окончательно блокироваться, а envirnment - tomcat, и перед выполнением операции я делаю вставку, а затем я пытаюсь обновить данные, а один из столбцов данных - clob –

ответ

2

Наконец я получил решение и его работу для меня

Вместо создания

Clob clob = connection.createClob(); 
clob.setClob(<parameter>, clob object); 

, что я сделал используется метод

ps.setCharacterStream(<parameter>, inputStreamReader, inputStream.available()); 

И его работы хорошо для меня

0

Ваше решение является лучшим, если у вас есть большой объем данных для хранения в CLOB. В противном случае вы можете просто использовать ps.setString, как если бы столбец был VARCHAR вместо CLOB.

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