在java中使用CLOB抛出异常
Posted
技术标签:
【中文标题】在java中使用CLOB抛出异常【英文标题】:using CLOB in java throwing exception 【发布时间】: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");
elsedbCon.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 驱动程序? 您是否尝试过使用此处定义的解决方案 ***.com/questions/12724971/db2-jdbc-create-clob-error 来解决这个问题?短版 - 不要使用 createClob(),使用 PreparedStatement.setCharacterStream() 【参考方案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 列一样。值得一试 - 会进一步减少代码。
【讨论】:
以上是关于在java中使用CLOB抛出异常的主要内容,如果未能解决你的问题,请参考以下文章