2012-07-09 111 views
2

我試圖保存以StrignBuffer作爲方法的XML響應。 我需要將此字符串數據保存爲Sql作爲CLOB並檢索相同。從字符串到Clob和Clob到字符串的轉換

響應可高達3-4Kb,應再次

檢索到的StringBuffer任何一個可以給我教程或不包括分貝具體方法/罐的樣本代碼。

如果CLOB不合適或者其他更好的選擇,我可以更改db列類型。

請建議。

+0

我覺得你可以的getString /了setString,就像VARCHAR2,司機將照顧它小弦。隨着大弦,它變得混亂。但3〜4KB應該沒問題(4000字節是第一個障礙)。 – Thilo 2012-07-09 08:10:41

+0

首先,除非需要同步,否則最好使用* StringBuilder *,它不是同步的並且比* StrignBuffer *快。其次,你正在研究哪個* DB *? – alfasin 2012-07-09 08:13:13

+2

@alfasin:鑑於涉及到數據庫,StringBuffer和StringBuilder之間的區別可能是完全不重要的。當然,無論如何都值得使用StringBuilder - 但我們不要過分強調性能優勢。 – 2012-07-09 08:16:11

回答

2

你可以通過調用connection.createClob()創建CLOB,那麼你就可以用的方法,如setStringsetCharacterStreamsetAsciiStream填充它。

創建一個PreparedStatement並調用其setClob()將CLOB存儲在數據庫中。

檢索數據是一樣的,從ResultSet中讀取它,並調用getCharacterStream,getAsciiStreamgetSubStream就可以了。

+0

我正在使用Spring JDBC進行jdbc操作。 – Reddy 2012-07-09 09:05:49

+0

然後使用'PreparedStatementCallback'和'PreparedStatementCreator'。 – 2012-07-10 17:45:03

1

對於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

相關問題