2013-04-08 60 views
0

我正在实现一个Spring + MSSQL Server 2008应用程序。我使用SimpleJDBCCall API来执行存储过程并检索结果。如何在Spring中使用SimpleJDBCCall在两个结果表中获取存储过程的结果?

对于具有单表结果的存储过程,它工作正常,但我不知道如何将它用于具有多表结果的过程。 这里是从我的数据库查询返回两个结果表的截图。 1

这里是我使用的代码,该代码正常工作单表result`

public class LoadOnDemandSP extends StoredProcedure{ 
    private static final String SPROC_NAME = "sps_IME_EF_GetAllMarketData"; 

    public LoadOnDemandSP(DataSource ds) { 
     super(ds, SPROC_NAME); 

     RowMapper mapper = new MyRowMapper(); 
     declareParameter(new SqlReturnResultSet("Return Value", mapper)); 
     declareParameter(new SqlParameter("FromDate", Types.VARCHAR)); 
     declareParameter(new SqlParameter("ToDate",Types.VARCHAR)); 
     compile(); 

    } 

    public List execute(String FromDate,String ToDate) { 
     Map inputs = new HashMap(); 
     inputs.put("FromDate",FromDate); 
     inputs.put("ToDate",ToDate); 
     Map map = super.execute(inputs); 
     if (map != null && map.size() > 0) { 
      return (List) map.get("Return Value"); 
     } else { 
      return new ArrayList(); 
     } 


    } 


    private class MyRowMapper implements RowMapper<LoadOnDemand> { 
     public LoadOnDemand mapRow(ResultSet rs, int rowNum) throws SQLException { 
      LoadOnDemand l = new LoadOnDemand(); 
//    f.setDay(rs.getInt("ContractDay")); 
      l.setInternalQuantity(rs.getInt("DVaznTon")); 
      l.setExportalQuantitiy(rs.getInt("SVaznTon")); 
      l.setInternalValue(rs.getDouble("DArzeshMillion")); 
      l.setExternalValue(rs.getDouble("SArzeshMillion")); 
      l.setInternalBuyersCount(rs.getInt("DBuyers")); 
      l.setExternalBuyersCount(rs.getInt("SBuyers")); 
      l.setInternalSellersCount(rs.getInt("DSellers")); 
      l.setExternalSellersCount(rs.getInt("SSellers")); 
      l.setInternalGoodsCount(rs.getInt("DSymbols")); 
      l.setExternalGoodsCount(rs.getInt("SSymbols")); 
      l.setTablo(rs.getString("GrouhAsli")); 
      return l; 
     } 
    } 



} 

///新增////

我的样品SP:

CREATE PROCEDURE [dbo].[sps_Test1] 

WITH RECOMPILE  
AS 

SELECT * 

FROM dbo.tbl1 

SELECT * 

FROM dbo.tbl2 
+0

您能否显示您的存储过程? – muthu 2013-04-08 11:56:13

+0

我刚刚在这里添加了样例程序 – 2013-04-08 12:04:38

回答

0

您无法处理多个表。您可以通过使用unionunionAll

CREATE PROCEDURE [dbo].[sps_Test1] 

WITH RECOMPILE  
AS 

SELECT * 

FROM dbo.tbl1 
UNION 
SELECT * 

FROM dbo.tbl2 
+0

我在这里遇到了一个困难的情况,我不是数据库的管理员,我不能更改存储过程,我只能更改我的java代码,您对我有什么建议吗? – 2013-04-08 12:15:07

+0

然后尝试这个http://static.springsource.org/spring/docs/2.0.7/reference/jdbc.html#jdbc-StoredProcedure – muthu 2013-04-08 12:18:37

+0

你可以试试这个http://www.xyzws.com/Javafaq/how-to-retrieve-multiple-result-sets-from-a-stored-procedure-in-jdbc/172 – muthu 2013-04-08 12:26:19

相关问题