【问题标题】:Spring jdbc template connection closed exception while reading clob objectSpring jdbc模板连接在读取clob对象时关闭异常
【发布时间】:2016-02-09 07:32:51
【问题描述】:

我有 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" /> 

【问题讨论】:

  • 问题是当您访问 clob 时,产生它的连接已经关闭。您应该在传递给 JDBC 模板的映射器中执行此操作。旁注:您确定需要使用getAsciiStream 而不是getCharacterStream

标签: java jdbc apache-commons spring-jdbc


【解决方案1】:

我可以通过将 clob 对象转换为 String 数据类型来检索它。在内部我猜 Spring 负责转换,但它工作正常。

【讨论】:

    【解决方案2】:

    异常的原因是当您访问 blob/clob 时,连接已经关闭。

    解决方案可能是:

    1. 在 Dao 中设置数据并返回 VO
    2. 通过事务管理器(调用者)发起事务 必须是事务管理器)。

    【讨论】:

      猜你喜欢
      • 2012-11-09
      • 1970-01-01
      • 2013-05-16
      • 1970-01-01
      • 1970-01-01
      • 2021-09-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多