我正在尝试将作为 StrignBuffer 的 XML 响应保存到方法中。我需要将此字符串数据作为 CLOB 保存到 Sql 并检索它。
响应最大可达 3-4Kb,应再次检索到 StringBuffer
任何人都可以给我不包括数据库特定方法/罐子的教程或示例代码。
如果 CLOB 不合适或任何其他更好的选择,我可以更改 db 列类型。
请建议。
CLOB
您可以通过调用创建一个connection.createClob()
,然后您可以使用诸如setString
、setCharacterStream
或之类的方法来填充它setAsciiStream
。
创建一个PreparedStatement
并调用它setClob()
以将您的 CLOB 存储在数据库中。
检索数据也是一样的,从 a 中读取,ResultSet
然后调用getCharacterStream
,getAsciiStream
或者getSubStream
就可以了。
对于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