Java Spring jdbc模板连接在读取clob对象时关闭异常
对于select list查询,我需要从oracle DB中的每一行读取5个以上的字符作为CLOB。使用springjdbc执行查询后,在尝试将CLOB对象转换为字符串时抛出以下异常Java Spring jdbc模板连接在读取clob对象时关闭异常,java,jdbc,apache-commons,spring-jdbc,Java,Jdbc,Apache Commons,Spring Jdbc,对于select list查询,我需要从oracle DB中的每一行读取5个以上的字符作为CLOB。使用springjdbc执行查询后,在尝试将CLOB对象转换为字符串时抛出以下异常 public List<MasterData> findByRqstId(int rqstId) { String sql = "SELECT * FROM MASTER_DATA WHERE REQUEST_ID = ?"; List<
public List<MasterData> findByRqstId(int rqstId) {
String sql = "SELECT * FROM MASTER_DATA WHERE REQUEST_ID = ?";
List<MasterData> masterDataList = getSimpleJdbcTemplate().query(sql,
ParameterizedBeanPropertyRowMapper.newInstance(MasterData.class), rqstId);
return masterDataList;
}
Caller Code
masterDataList = masterDataDao.findByRqstId(rqstId);
String outputResponse=null;
if (masterDataList != null && masterDataList.size() > 0) {
for (MasterData mData : masterDataList) {
Clob clob = mData.getOutputResponse();
InputStream in = clob.getAsciiStream();
StringWriter w = new StringWriter();
IOUtils.copy(in, w);
String clobAsString = w.toString();
outputResponse = clob.toString();
}
}
据我所知,由于clob对象的大小更大,缓存无法为下一个操作保存数据。以下属性没有任何区别
<property name="connectionProperties" value="defaultRowPrefetch=1000" />
<property name="connectionProperties" value="defaultLobPrefetchSize=500000" />
我可以通过将clob对象转换为字符串数据类型来检索它。在内部,我猜Spring负责转换,但工作正常。出现异常的原因是,当您访问blob/clob时,连接已经关闭
解决办法可以是:
问题是,当您访问clob时,产生clob的连接已经关闭。您应该在传递给JDBC模板的映射器中执行此操作。旁注:您确定需要使用
getascistream
而不是getCharacterStream
?
<property name="connectionProperties" value="defaultRowPrefetch=1000" />
<property name="connectionProperties" value="defaultLobPrefetchSize=500000" />