【问题标题】:DB2 JDBC Create clob errorDB2 JDBC 创建 clob 错误
【发布时间】:2012-09-25 08:29:20
【问题描述】:

我使用的是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)

是什么原因?

【问题讨论】:

  • 您使用的是哪个版本的 JBoss AS,您下载了哪个二进制文件?
  • createClob() 是在 JDBC 4.0 / Java 6 中添加的,很可能您正在使用 JDBC 3.0 驱动程序。

标签: java jdbc db2 clob


【解决方案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();

我发现这是处理 CLOB(以及以类似方式处理 BLOB)的唯一跨 DBMS/JDBC 解决方案。

【讨论】:

    猜你喜欢
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 2012-11-11
    • 2018-03-13
    • 1970-01-01
    相关资源
    最近更新 更多