赞
踩
公司在将原来的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 驱动也没有这个问题。这个驱动包我没试过,也不知道是不是真的
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。