从NamedParameterJdbcTemplate获取ResultSet,执行存储过程

时间:2015-06-05 13:53:19

标签: java sql-server stored-procedures

我正在尝试使用NamedParameterJdbcTemplate从存储过程的执行中获取ResultSet。我已设置我的存储过程以返回id为列名的值。不幸的是,我发现执行存储过程的方式似乎是执行两次执行,然后立即关闭结果集。我需要找到一种获取ResultSet的方法。

MapSqlParameterSource params = params("intSiteId",job.getSite().getId())
            .addValue("dtmStart", job.getStartDate() == null ? null : dateTimeString(job.getStartDate()))
            .addValue("dtmEnd", job.getEndDate() == null ? null : dateTimeString(job.getEndDate()))
            .addValue("intManualFl",job.isManual());

ResultSet result = getTemplate().execute(getSql("create",params), params, new PreparedStatementCallback<ResultSet>(){
        @Override  
        public ResultSet doInPreparedStatement(PreparedStatement ps)  
                throws SQLException, DataAccessException {  
            return ps.executeQuery();
        }
        });

return result.getInt("id");

1 个答案:

答案 0 :(得分:0)

我通过返回整数列表而不是结果集来解决问题。这允许我在结果集关闭之前获取数据并返回它。我在这里找到了这个解决方案:http://www.java2s.com/Code/Java/Spring/SelectStatementWithPreparedStatementCallback.htm

List<Integer> result = getTemplate().execute(getSql("create"), params, new PreparedStatementCallback<List<Integer>>(){
        @Override  
        public List<Integer> doInPreparedStatement(PreparedStatement ps)  
                throws SQLException, DataAccessException {  
            ResultSet rs = ps.executeQuery();
            List<Integer> id = new LinkedList<Integer>();

            while (rs.next())
                id.add(rs.getInt(1));

            rs.close();
            return id;
        }
        });
        return result.get(0);