我正在使用9系列的db2jcc驱动程序FIX Pack 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)
原因是什么?
答案 0 :(得分:4)
根据我的经验,根本不需要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();
我发现这是处理CLOB(以类似方式处理BLOB)的唯一跨DBMS / JDBC解决方案。