【问题标题】:using CLOB in java throwing exception在java中使用CLOB抛出异常
【发布时间】:2013-01-12 16:47:17
【问题描述】:

我正在将 clob 数据插入 mysql 数据库...这是我的代码

Clob cl=dbCon.createClob();
cl.setString(1,userAbout);
dbCon.setAutoCommit(false);
PreparedStatement insertClob=dbCon.prepareStatement("UPDATE user_data SET user_about=? WHERE user_id=?");
insertClob.setClob(1,cl);
insertClob.setInt(2,userId);
int count= insertClob.executeUpdate();
if(count==1){dbCon.commit();dbCon.close();out.write("success");}
else{dbCon.rollback();dbCon.close();out.print("error");}

这是抛出异常

java.lang.AbstractMethodError: org.apache.tomcat.dbcp.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.createClob()Ljava/sql/Clob;

这里有什么问题?以及如何解决?

【问题讨论】:

  • 你是如何创建 dbConnection 的?
  • 您使用的是什么版本的 JDBC 驱动程序?
  • 使用连接池 Connection dbCon = DBConnection.getDBConnection();
  • 如何知道我使用的是什么 JDBC 驱动程序?
  • 您是否尝试过使用此处定义的解决方案 stackoverflow.com/questions/12724971/db2-jdbc-create-clob-error 来解决这个问题?短版 - 不要使用 createClob(),使用 PreparedStatement.setCharacterStream()

标签: java jdbc clob


【解决方案1】:

反正你不需要createClob()。我发现使用 setCharacterStream() 更加稳定(并且得到所有 JDBC 驱动程序的更好支持)。

StringReader reader = new StringReader(userAbout);
PreparedStatement insertClob = dbCon.prepareStatement("UPDATE user_data SET user_about=? WHERE user_id=?");
insertClob.setCharacterStream(1, reader, userAbout.length());
insertClob.setInt(2,userId);

int count= insertClob.executeUpdate();

这也适用于INSERT 语句。无需创建任何中间 clob(或 blob)对象。

请注意,我将错误的索引 8 更改为正确的索引 2 以匹配 UPDATE 语句中的占位符。

许多现代驱动程序还可以处理“简单”setString(),就像 CLOB 列一样。值得一试 - 会进一步减少代码。

【讨论】:

    猜你喜欢
    • 2016-08-10
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    相关资源
    最近更新 更多