【问题标题】:How to get results of an stored procedure using SimpleJDBCCall in spring with two result table?如何在 spring 中使用 SimpleJDBCCall 获取存储过程的结果以及两个结果表?
【发布时间】:2013-04-08 11:52:40
【问题描述】:

我正在实现一个 Spring+ MSSQL Server 2008 应用程序。我使用 SimpleJDBCCall API 来执行存储过程并检索结果。

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

这是我使用的代码,此代码与单表结果一起正常工作`

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

【问题讨论】:

  • 你能展示一下你的店铺流程吗?
  • 我刚刚在这里添加了示例程序

标签: java spring stored-procedures sql-server-2008-r2


【解决方案1】:

您无法处理多个表。您可以使用unionunionAll 将这两个表合并为一个

CREATE PROCEDURE [dbo].[sps_Test1]

WITH RECOMPILE      
AS

SELECT *

FROM dbo.tbl1
UNION
SELECT *

FROM dbo.tbl2

【讨论】:

猜你喜欢
  • 2013-03-02
  • 2011-05-28
  • 2017-06-22
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 1970-01-01
相关资源
最近更新 更多