2013-01-12 55 views
1

CLOB我將CLOB數據到MySQL數據庫...這裏是我的代碼在Java中使用投擲例外

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; 

什麼問題嗎?我該如何解決它?

+0

你是如何創建dbConnection的? –

+0

您使用的是什麼版本的JDBC驅動程序? – Swapnil

+0

使用連接池連接dbCon = DBConnection.getDBConnection(); –

回答

5

反正你不需要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列。值得嘗試的 - 會更多地減少代碼。