如何在 spring 中使用 SimpleJDBCCall 获取存储过程的结果以及两个结果表?
Posted
技术标签:
【中文标题】如何在 spring 中使用 SimpleJDBCCall 获取存储过程的结果以及两个结果表?【英文标题】:How to get results of an stored procedure using SimpleJDBCCall in spring with two result table? 【发布时间】: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
【问题讨论】:
你能展示一下你的店铺流程吗? 我刚刚在这里添加了示例程序 【参考方案1】:您无法处理多个表。您可以使用union
或unionAll
将这两个表合并为一个
CREATE PROCEDURE [dbo].[sps_Test1]
WITH RECOMPILE
AS
SELECT *
FROM dbo.tbl1
UNION
SELECT *
FROM dbo.tbl2
【讨论】:
我在这里遇到了一个难题,我不是数据库管理员,我根本无法更改存储过程,我只能更改我的 java 代码,您有什么建议吗?跨度> 然后试试这个static.springsource.org/spring/docs/2.0.7/reference/… 你也可以试试这个xyzws.com/Javafaq/…以上是关于如何在 spring 中使用 SimpleJDBCCall 获取存储过程的结果以及两个结果表?的主要内容,如果未能解决你的问题,请参考以下文章
spring3: 对JDBC的支持 之 Spring提供的其它帮助 SimpleJdbcInsert/SimpleJdbcCall/SqlUpdate/JdbcTemplate 生成主键/批量处理(
如何在 Spring Batch 中使用 Spring 事务支持
Spring-batch:如何在 Spring Batch 中使用 skip 方法捕获异常消息?
如何在 Spring webflux 应用程序中使用 Spring WebSessionIdResolver 和 Spring Security 5?