JdbcTemplate调用SQL server的存储过程没有返回结果集的解决方法

今天实现一个的功能,要在首要展示不同数据表的统计数据,于是想到了用存储过程通过不同的select语句实现各种统计数据,然后通过多个输出参数获取不同的统计数据,但是却出现了下面的异常:

com.microsoft.sqlserver.jdbc.SQLServerException: 该语句没有返回结果集

我用JdbcTemplate调用SQL server的存储过程的一部分代码如下:

Map<String, Object> outArgInfo = new HashMap<String,Object>();
// 向输出参数 Map 中添加输出参数信息,key 是存储过程对应输出参数名称,值是 java.sql.Types 中的成员变量
outArgInfo.put("zysl", Types.INTEGER);
outArgInfo.put("dtzl", Types.INTEGER);
outArgInfo.put("r", Types.INTEGER);
outArgInfo.put("c1", Types.INTEGER);
outArgInfo.put("gqwj", Types.INTEGER);
outArgInfo.put("dtsydw", Types.INTEGER);
outArgInfo.put("dtwbqys", Types.INTEGER);
outArgInfo.put("olddt", Types.INTEGER);
outArgInfo.put("yhsbl", Types.INTEGER);
outArgInfo.put("jysb", Types.INTEGER);
outArgInfo.put("jybgs", Types.INTEGER);
outArgInfo.put("fxwts", Types.INTEGER);
// 执行存储过程,返回值为将结果集包装的 List,输出参数值直接返回到 outArgInfo
//param1:存储过程名称
//param2:输出参数 Map 对象
//param3-n:输入参数与其值,如 "id",1,"name","zhang",...
ProcTemplateUtil procTemplateUtil=new ProcTemplateUtil(jdbcTemplate);
List list = procTemplateUtil.exec("index_data", outArgInfo, "town_names", rank);

注:ProcTemplateUtil 是一个TemplateUtil调用sqlserver的工具类具体详情可点击查看

后来在网上找到了一个解决办法:
在sql语句前面加上"SET NOCOUNT ON".

但是不管我在JdbcTemplate调用语句里加"SET NOCOUNT ON",还是在存储过程里加"SET NOCOUNT ON"都不行,还是报这个异常.

后来我在存储过程select了所有的输出参数才解决,如下:

ALTER PROCEDURE [dbo].[index_data]
    @town_names varchar(200),
    @zysl int output,
	@dtzl int output,
	@r int output,
	@c1 int output,
	@gqwj int output,
	@dtsydw int output,
	@dtwbqys int output,
	@olddt int output,
	@yhsbl int output,
	@jysb int output,
	@jybgs int output,
	@fxwts int output
BEGIN
SET NOCOUNT ON;
--中间是各种语句获取各个输出参数的值
select @zysl as zysl,@dtzl as dtzl,@r as r,@c1 as c1,@gqwj as gqwj,@dtsydw as      dtsydw,@dtwbqys as dtwbqys,@olddt as olddt,@yhsbl as yhsbl,@jysb as jysb,@jybgs as jybgs,@fxwts as fxwts;
END

#我觉得可能是JdbcTemplate只接收到select的结果集,而output参数没有接收到(可能是我JdbcTemplate调用存储过程的写法存在问题,欢迎各位指正!)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值