Spring ,Hibernate clob大欄位處理
1、首先資料表中的clob型別對應java持久化類的String型別;而blob型別對應byte[]型別
2、定義hibernate標籤時,持久化類中對應clob型別的屬性的hibernate type為
org.springframework.orm.hibernate.support.ClobStringType ;
而對應blob型別的屬性的hibernate type應為
org.springframework.orm.hibernate.support.BlobByteArrayType。
在 VO 的 hbm.xml 裡面的配置
在Spring 配置檔案( applicationContext.xml ) 的配置
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
<bean
id="nativeJdbcExtractor"
class="org.springframework.jdbc.support.nativejdbc.C3P0NativeJdbcExtractor" />
<!--
用於配置 oracle clob -->
<bean id ="oracleLobHandle" class ="org.springframework.jdbc.support.lob.OracleLobHandler" />
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
destroy-method="close">
.........
..........
<!-- 用於配置 clob -->
<property name ="lobHandler" >
<ref bean ="oracleLobHandle" />
</property>
</bean>
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
插入操作
DriverManager.registerDriver(new
oracle.jdbc.OracleDriver());
String url = "jdbc:oracle:thin:@192.168.0.115:1521:rck";
String userName = "scott";
String password = "tiger";
Connection conn =
DriverManager.getConnection (url, userName, password);
String policyInfo="....."; //假設這個變數很大
for(int i=0;i<800;i++)
{
policyInfo+="美舍雅閣成為家庭化妝臺的主力品牌,我們是中國市場的第二個寶潔jj262361。";
}
/* 設定不自動提交 */
boolean defaultCommit = conn.getAutoCommit();
conn.setAutoCommit(false);
try {
/* 插入一個空的CLOB物件 */
Statement stmt = conn.createStatement();
stmt.executeUpdate("INSERT INTO coinfo VALUES ('111', EMPTY_CLOB(),'liuj')");
/* 查詢此CLOB物件並鎖定 */
ResultSet rs = stmt.executeQuery("SELECT c_context FROM coinfo WHERE c_id='111' FOR UPDATE");
while (rs.next()) {
/* 取出此CLOB物件 */
oracle.sql.CLOB clob = (oracle.sql.CLOB)rs.getClob("c_context");
/* 向CLOB物件中寫入資料 */
BufferedWriter outt = new BufferedWriter(clob.getCharacterOutputStream());
StringReader in = new StringReader(policyInfo);
int c;
while ((c=in.read())!=-1) {
outt.write(c);
}
outt.flush();
in.close();
outt.close();
System.out.println("成功~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
conn.commit();
} catch (Exception ex) {
/* 出錯回滾 */
conn.rollback();
throw ex;
}
/* 恢復原提交狀態 */
conn.setAutoCommit(defaultCommit);