spring jdbctemplate get byte array

时间:2015-12-09 08:58:51

标签: java spring spring-batch

我将xml作为字节数组存储在oracle数据库的clob列中。 现在尝试使用jdbctemplate将结果集作为弹出批处理中的字节数组。它抛出异常

  

org.springframework.dao.InvalidDataAccessApiUsageException :StatementCallback; SQL [从中选择DEFAULT_REPORT_PARAM_XML   cfg_report_list,其中report_name ='付款STP报告'“];   不支持的功能;嵌套异常是   java.sql.SQLFeatureNotSupportedException:不支持的功能

我正在使用的PFB代码示例

byte[] configxml = jdbcTemplate.queryForObject(
                "select DEFAULT_REPORT_PARAM_XML from cfg_report_list  where report_name='Payments STP Report'", 
                byte[].class);

请注意我使用的是spring-batch 3.0.1 RELEASE。

请让我知道解决这个问题的方法。

由于

2 个答案:

答案 0 :(得分:4)

无需致电getBlob();你应该像这样简化:

byte[] configxml = jdbcTemplate.queryForObject(
    "select DEFAULT_REPORT_PARAM_XML from cfg_report_list  where report_name='Payments STP Report'",
    (rs, rowNum) -> rs.getBytes(1));

答案 1 :(得分:3)

尝试使用RowMapper,然后使用ResultSet.getBlob

public class YourXmlRowMapper implements RowMapper<byte[]> {

    public byte[] mapRow(ResultSet rs, int rowNum) throws SQLException {
         Blob column = rs.getBlob("DEFAULT_REPORT_PARAM_XML");
         return column.getBytes(1, column.length());
    }
}



byte[] configxml = jdbcTemplate.queryForObject(
            "select DEFAULT_REPORT_PARAM_XML from cfg_report_list  where  report_name='Payments STP Report'", 
           new YourXmlRowMapper());