Spring如何使用JdbcTemplate调用sql server存储过程 返回list

public static List execteProcList(final String dbKey,final String procedure,final String [] param){
        JdbcTemplate jdbcTemplate = getJdbcTemplate(dbKey);
        List resultList=(List)jdbcTemplate.execute(
                new CallableStatementCreator() {
                    
                    @Override
                    public CallableStatement createCallableStatement(Connection con)
                            throws SQLException {
                        String  strProc="{ call "+procedure+" (";
                         for (int i = 0; i < param.length; i++) {
                                if(i!=param.length-1){
                                    strProc+="?,";
                                }else {
                                    strProc+="?";
                                }
                              }
                             strProc+=")}";
                        CallableStatement cs=con.prepareCall(strProc);
                           for (int i = 1; i <=param.length; i++) {
                                cs.setString(i, param[i-1]);
                              }
                        return cs;
                    }
                }
                , new CallableStatementCallback() {

                    @Override
                    public Object doInCallableStatement(CallableStatement cs)
                            throws SQLException, DataAccessException {
                        ResultSet rs=cs.executeQuery();
                        ResultSetMetaData rmd=rs.getMetaData();
                        int columnCount=rmd.getColumnCount();
                        List<Map<String,Object>> resultsMap=new ArrayList<Map<String,Object>>();
                        while(rs.next()){
                            Map<String,Object> mso=new HashMap<String,Object>(columnCount);
                            for(int i=1;i<=columnCount;i++){
                                mso.put(rmd.getColumnName(i), rs.getObject(i));
                                //mso.put(s, rs.getString(s));
                            }
                            resultsMap.add(mso);
                            
                        }
                        rs.close();
                        return resultsMap;
                    }
                    
                });
                
                return resultList;
        
        
    }

posted @ 2015-10-20 09:27  R142857  阅读(1301)  评论(0编辑  收藏  举报