java 存儲oracle的clob字段

項目中有很長的字符創需要存儲,用到了oracle的clob字段,直接很長的字符串插入到clob字段中會報字符過長的異常,於是便尋求解決方案。看到這個博客寫的還不錯

首先,創建一個含CLOB字段的表:

create table test (id INTEGER, content clob);

 然後插入空值

String strSql = “INSERT INTO TEST(id,content) values(‘0001’,?) ”;

con.setAutoCommit(false); //connConnection對象

//創建並實例化一個CLOB對象

CLOB clob = new CLOB((OracleConnection)con);

   clob = oracle.sql.CLOB.createTemporary((OracleConnection)con,true,1);

//CLOB對象賦值

   clob.putString(1,formateSingleQuotes(Content));

   OracleConnection OCon = (OracleConnection)con;

   OraclePreparedStatement pstmt = (OraclePreparedStatement)OCon.prepareCall(strSql);

   pstmt.setCLOB(1,clob);

   int i = pstmt.executeUpdate();

   pstmt.close();

   OCon.commit();

   OCon = null;

con = null;      


使用上面的解決方案,在項目會出現問題,因爲我用的是c3p0的的數據庫連接池獲取的數據庫連接,於是報了com.mchange.v2.c3p0.impl.NewProxyConnection cannot be cast to oracle.jdbc.driver.OracleConnection異常,自己嘗試了半天又在網上找到了解決方案:
- added spring-1.2-rc1.jar 

- added 
import org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor; 

- replaced the following code in nullSafeSet method from JGeometryType: 

OracleConnection connection = (OracleConnection) preparedStatement.getConnection(); 

with: 

C3P0NativeJdbcExtractor cp30NativeJdbcExtractor = new C3P0NativeJdbcExtractor(); 
OracleConnection connection = (OracleConnection) cp30NativeJdbcExtractor.getNativeConnection(preparedStatement.getConnection()); 


希望和我有同樣問題的朋友能夠少走彎路

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章