【发布时间】:2016-11-15 10:19:24
【问题描述】:
我正在尝试将数据作为 clob 插入到 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.createTemporary(CLOB.java:676)
在 oracle.sql.CLOB.createTemporary(CLOB.java:640)
如果我尝试创建CLOB 如下
Clob clob = connection.createClob()
并将字符串值设置为
clob.setString(1, "test code");
它卡在createClob();
【问题讨论】:
-
你在什么环境下运行你的代码,例如在雄猫?您如何创建或检索数据库连接?
-
“卡在 createClob()”是什么意思?它会崩溃吗?它不会编译吗?还是代码挂起,即不继续执行?
-
卡住意味着在 createClob() 之后它将直接阻塞并且环境是 tomcat 并且在执行操作之前我正在执行插入然后我尝试更新数据并且其中一个数据列是块
-
CLOB.createTemporary 如果不使用 oracle.jdbc.driver.OracleConnection 有一个BUG。
-
这不是错误。这是一种仅适用于
oracle.jdbc.driver.OracleConnection实例的方法。并且 Tomcat 只会向您传递一个代理连接,该连接会主动防止被解包以访问真正的 Oracle 连接。此外,整个oracle.sql.CLOB类现在已被弃用。