簡體   English   中英

從NamedParameterJdbcTemplate獲取執行存儲過程的ResultSet

[英]Get ResultSet from NamedParameterJdbcTemplate executing a stored procedure

我正在嘗試使用NamedParameterJdbcTemplate從存儲過程的執行中獲取ResultSet。 我已經設置了存儲過程以返回ID為列名的值。 不幸的是,我發現執行存儲過程的方式似乎兩次調用了execute,然后立即關閉了結果集。 我需要找到一種獲取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");

我通過返回整數列表而不是結果集來解決此問題。 這使我可以在關閉結果集之前獲取數據並返回它。 我在這里找到了這個解決方案: 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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM