我試圖保存以StrignBuffer作爲方法的XML響應。 我需要將此字符串數據保存爲Sql作爲CLOB並檢索相同。從字符串到Clob和Clob到字符串的轉換
響應可高達3-4Kb,應再次
檢索到的StringBuffer任何一個可以給我教程或不包括分貝具體方法/罐的樣本代碼。
如果CLOB不合適或者其他更好的選擇,我可以更改db列類型。
請建議。
我試圖保存以StrignBuffer作爲方法的XML響應。 我需要將此字符串數據保存爲Sql作爲CLOB並檢索相同。從字符串到Clob和Clob到字符串的轉換
響應可高達3-4Kb,應再次
檢索到的StringBuffer任何一個可以給我教程或不包括分貝具體方法/罐的樣本代碼。
如果CLOB不合適或者其他更好的選擇,我可以更改db列類型。
請建議。
你可以通過調用connection.createClob()
創建CLOB
,那麼你就可以用的方法,如setString
,setCharacterStream
或setAsciiStream
填充它。
創建一個PreparedStatement
並調用其setClob()
將CLOB存儲在數據庫中。
檢索數據是一樣的,從ResultSet
中讀取它,並調用getCharacterStream
,getAsciiStream
或getSubStream
就可以了。
我正在使用Spring JDBC進行jdbc操作。 – Reddy 2012-07-09 09:05:49
然後使用'PreparedStatementCallback'和'PreparedStatementCreator'。 – 2012-07-10 17:45:03
對於NamedParameterJdbcTemplte
:
MapSqlParameterSource paramSource = new MapSqlParameterSource();
paramSource.addValue("clob", "a long long text", Types.CLOB);
namedTemplate.update(INSERT_STMT, paramSource);
對於JdbcTemplate
:
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">
<property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/>
</bean>
和:
private @Autowire LobHandler lobHandler;
jdbcTemplate.update("insert into customer(id,name,comments) "
+ "values (?, ?, ?)", new PreparedStatementSetter() {
public void setValues(PreparedStatement ps) throws SQLException {
ps.setLong(1, 2L);
ps.setString(2, "Jon");
lobHandler.getLobCreator().setClobAsString(ps, 3, "Clob data");
}
});
要從ResultSet
提取字符串:
inc.setDetail(lobHandler.getClobAsString(rs, "DETAIL"));
看官方文檔:http://docs.spring.io/spring/docs/3.0.x/reference/jdbc.html#jdbc-lob
我覺得你可以的getString /了setString,就像VARCHAR2,司機將照顧它小弦。隨着大弦,它變得混亂。但3〜4KB應該沒問題(4000字節是第一個障礙)。 – Thilo 2012-07-09 08:10:41
首先,除非需要同步,否則最好使用* StringBuilder *,它不是同步的並且比* StrignBuffer *快。其次,你正在研究哪個* DB *? – alfasin 2012-07-09 08:13:13
@alfasin:鑑於涉及到數據庫,StringBuffer和StringBuilder之間的區別可能是完全不重要的。當然,無論如何都值得使用StringBuilder - 但我們不要過分強調性能優勢。 – 2012-07-09 08:16:11