2016-11-15 69 views
2

我试图插入的数据作为在Oracle数据库和我使用用于插入代码CLOB是如下:尝试的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.sql.CLOB被转换为oracle.jdbc.OracleConnection

。 createTemp的卵巢(CLOB.java:676)

在oracle.sql.CLOB.createTemporary(CLOB.java:640)

如果我试图创建CLOB如下

Clob clob = connection.createClob() 

和设置字符串值作为

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

并且它停留在createClob();

+0

在什么环境下运行你的代码,例如在Tomcat中?你如何创建或检索数据库连接? – Codo

+0

“createClob()”的意思是什么意思?它会崩溃吗?不编译?还是代码挂起,即不继续执行? – Codo

+0

stucking意思是在createClob()后它直接进入finally块并且环境是tomcat,并且在执行操作之前,我正在做一个insert,然后我试图更新数据,其中一个数据列是clob –

回答

2

最后我得到了解决,其工作对我来说

而不是创造

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

的我所做的是使用的方法

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

及其对我

0
工作正常

如果您有大量数据存储到CLOB中,那么您的解决方案是最好的。否则,您可以使用ps.setString,就好像该列是VARCHAR而不是CLOB

相关问题