当前位置:   article > 正文

JDBC调用SQL server的存储过程没有返回结果集的解决方法_com.microsoft.sqlserver.jdbc.sqlserverexception: 该

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

公司在将原来的C#项目转为Java,但是数据库还是在用SQL server。今天在用JDBC调用存储过程的时候出了一个异常:
com.microsoft.sqlserver.jdbc.SQLServerException: 该语句没有返回结果集
但矛盾的是用数据库执行存储过程的时候明明是有返回查询结果的。

后来在网上找到了一个解决办法:
在sql语句前面加上
SET NOCOUNT ON
比如我的sql语句原来是exec C_GetSysAlarm ?
现在要改成SET NOCOUNT ON exec C_GetSysAlarm ?

网上的解释是SQL server的新版的驱动包会关注到存储过程执行过程中返回的“影响多少行”这些信息,有这些信息存在,就会抛出空结果集异常;
在sql语句前加“SET NOCOUNT ON ”,表示不返回计数(表示受 Transact-SQL 语句影响的行数)

还有种方法是用比较早的驱动包,比如sql jdbc-1.1之前的驱动包就没有这个问题。但是数据库如果版本比较新的话也不支持老的驱动包,比如从SQL server2008就不支持sql jdbc-1.1了(我在项目里用的是sqljdbc4)。
另外据说 jtds 驱动也没有这个问题。这个驱动包我没试过,也不知道是不是真的

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/141562
推荐阅读
相关标签
  

闽ICP备14008679号