我有5k +个字符从oracle DB中的每一行读取一个选择列表查询的CLOB。使用springjdbc执行查询后,在尝试将CLOB对象转换为String时抛出以下异常。
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对象。但是当我尝试使用上面的代码将对象转换为字符串时,我得到了连接关闭异常。
Exception in thread "main" java.sql.SQLRecoverableException: Close Connection
at oracle.sql.CLOB.getDBAccess(CLOB.java:1421)
at oracle.sql.CLOB.getAsciiStream(CLOB.java:352)
据我所知,由于clob对象的大小较大,因此缓存无法保存下一个操作的数据。以下属性没有区别。
<property name="connectionProperties" value="defaultRowPrefetch=1000" />
<property name="connectionProperties" value="defaultLobPrefetchSize=500000" />
答案 0 :(得分:1)
我能够通过将它转换为String数据类型来检索clob对象。我觉得Spring负责转换,但它的工作正常。
答案 1 :(得分:0)
出现异常的原因是,当您访问blob / clob时,连接已关闭。
解决方案可能是: