DB2 JDBC创建CLOB错误(DB2 JDBC Create clob error)

2019-09-28 13:56发布

我使用的是9系列的db2jcc司机修订包6。

我的代码

public void setParamsPreparedStatement(PreparedStatement s, String[][] params) throws Exception {
  ...
  Clob myClob = s.getConnection().createClob();
  myClob.setString(1, params[i][0]);

  s.setClob(i+1, myClob);

在JBoss中5.1.0 GA它抛出的错误:

12:01:54,914 242266 ERROR [org.jboss.aspects.tx.TxPolicy] (ConsumerMessageQueue:(1):) javax.ejb.EJBTransactionRolledbackException: Unexpected Error
java.lang.AbstractMethodError: org.jboss.resource.adapter.jdbc.jdk5.WrappedConnectionJDK5.createClob()Ljava/sql/Clob;
    at database.Executer.setParamsPreparedStatement(Executer.java:761)

在普通的Java它给人的错误:

Exception in thread "main" java.lang.AbstractMethodError: com.ibm.db2.jcc.b.b.createClob()Ljava/sql/Clob;
    at TestClob.main(TestClob.java:20)

原因是什么?

Answer 1:

从我的经验createClob()是不是需要在所有的呼叫。 只要使用PreparedStatement.setCharacterStream()

PreparedStatement pstmt = conn.prepareStatement("insert into clob_table (id, clob_colum) values (?,?)";
String clobData = "....";
Reader reader = new StringReader(clobData);
pstmt.setInt(1, 42);
pstmt.setCharacterStream(2, reader, clobData.length());
pstmt.executeUpdate();

我已经发现这是唯一的跨DBMS / JDBC溶液来处理的CLOB(和BLOB的类似的方式)。



文章来源: DB2 JDBC Create clob error
标签: java jdbc db2 clob