我正在尝试将StrignBuffer的XML响应保存到方法中。 我需要将此字符串数据作为CLOB保存到Sql并检索它。
响应最高可达3-4Kb,应该再次检索到StringBuffer
任何人都可以给我教程或示例代码,其中不包含特定于db的方法/ jar。
如果CLOB不合适或任何其他更好的替代方案,我可以更改db列类型。
请建议。
答案 0 :(得分:2)
您可以通过调用CLOB
来创建connection.createClob()
,然后您可以使用setString
,setCharacterStream
或setAsciiStream
等方法填充它。
创建PreparedStatement
并调用其setClob()
将CLOB存储在数据库中。
检索数据是一样的,从ResultSet
读取数据并在其上调用getCharacterStream
,getAsciiStream
或getSubStream
。
答案 1 :(得分: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