程序报该语句没有返回结果集请问是什么原因

yxhit 2012-01-16 11:43:04
异常信息:
com.microsoft.sqlserver.jdbc.SQLServerException: 该语句没有返回结果集。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:171)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(SQLServerPreparedStatement.java:394)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(SQLServerPreparedStatement.java:340)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:4575)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1400)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(SQLServerStatement.java:179)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(SQLServerStatement.java:154)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(SQLServerPreparedStatement.java:283)
at org.com.dao.CostCustomerDao.serachdao(CostCustomerDao.java:26)
at org.apache.jsp.view.storage.cost_005fcustomer_005fslcbll_005ftable_jsp._jspService(cost_005fcustomer_005fslcbll_005ftable_jsp.java:80)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.com.filter.EncodingFilter.doFilter(EncodingFilter.java:22)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)

我的代码:
dao:
public class CostCustomerDao {
public List<CostCustomerBean> serachdao(String area_no,String start_date,String end_date){
List<CostCustomerBean> list=new ArrayList<CostCustomerBean>();
Connection conn=null;
CallableStatement st=null;
ResultSet rs=null;
String proc="{?=call p_bi_cost_customer_slcbll(?,?,?)}";
try {
conn=DBdao.getconn();
st=conn.prepareCall(proc);
st.registerOutParameter(1,Types.INTEGER);
st.setString(2,area_no);
st.setString(3,start_date);
st.setString(4,end_date);
rs=st.executeQuery();
while(rs.next()){
String data_disp=rs.getString("data_disp");
String col_data=rs.getString("col_data");
CostCustomerBean bean= new CostCustomerBean(data_disp,col_data);
list.add(bean);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
DBdao.closeconn(rs, st, conn);
}
return list;
}
jsp:
<%@page import="org.com.bean.CostCustomerBean"%>
<jsp:useBean id="serach" class="org.com.dao.CostCustomerDao"></jsp:useBean>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
String area_no=request.getParameter("area_no");
String start_date=request.getParameter("start_date");
String end_date=request.getParameter("end_date");
List<CostCustomerBean> list=serach.serachdao(area_no,start_date,end_date);
request.setAttribute("list",list);
%>

<table border="1" id="table1" align="center">
<tr class="tr1">
<th>项目</th>
<th>金额</th>
</tr>
<tbody id="tbody">
<c:forEach items="${list}" var="c">
<tr class="tr2" id="tr">
<td>${c.data_disp }</td>
<td><fmt:formatNumber value="${c.col_data}" pattern="#,##0.00"/></td>
</tr>
</c:forEach>
</tbody>
</table>
我其他表也是这样操作的能正常查询,只有这个一直报这个错,请问是我代码有问题,还是存贮过程的原因,存贮过程具体怎么写的我不清楚,我只负责调用,放到数据库里面直接执行存贮过程是正常的,能查出东西
...全文
1739 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yxhit 2012-01-17
  • 打赏
  • 举报
回复
谢谢大家,问题解决了,只要在存贮过程前面加上SET NOCOUNT ON就可以了
  • 举报
回复
@yxhit 请问具体怎么加啊?我也遇到了这个问题
五哥 2012-01-17
  • 打赏
  • 举报
回复
你的SQL语句要求从存储过程取得返回结果:
{?=call p_bi_cost_customer_slcbll(?,?,?)}


有返回resultset么 ?

如果没有 ,那就是没有了
dracularking 2012-01-17
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 yxhit 的回复:]

引用 3 楼 dracularking 的回复:
弄个同名(不同数据库)的或名字接近的存储过程,但内容可为空(保证存储过程本身不会导致错误),测试下

测试了,换了其他的存贮过程不修改任何代码是可以的,用这个存贮过程就报这个错
[/Quote]
若如此,基本上确定是存储过程本身的问题了
我猜测是不是存储过程中某一句sql不返回结果集而暴露的问题
看看这样是不是有用:
http://hedyn.iteye.com/blog/856040
wnf2009 2012-01-16
  • 打赏
  • 举报
回复
存储过程不带返回
MiceRice 2012-01-16
  • 打赏
  • 举报
回复
你的SQL语句要求从存储过程取得返回结果:
{?=call p_bi_cost_customer_slcbll(?,?,?)}

但这个存储过程不带任何返回,所以JDBC就傻眼了。

考虑去掉前面的 ?=
yxhit 2012-01-16
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dracularking 的回复:]
弄个同名(不同数据库)的或名字接近的存储过程,但内容可为空(保证存储过程本身不会导致错误),测试下
[/Quote]
测试了,换了其他的存贮过程不修改任何代码是可以的,用这个存贮过程就报这个错
yxhit 2012-01-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xinlan1022 的回复:]
引用 1 楼 ldh911 的回复:

你的SQL语句要求从存储过程取得返回结果:
{?=call p_bi_cost_customer_slcbll(?,?,?)}

但这个存储过程不带任何返回,所以JDBC就傻眼了。

考虑去掉前面的 ?=


应该是这个原因,以前没有用过?=
[/Quote]用过,其他的存贮过程都是这样用的,可以,去掉?=后还是报同样的错,纠结中
xinlan1022 2012-01-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ldh911 的回复:]

你的SQL语句要求从存储过程取得返回结果:
{?=call p_bi_cost_customer_slcbll(?,?,?)}

但这个存储过程不带任何返回,所以JDBC就傻眼了。

考虑去掉前面的 ?=
[/Quote]

应该是这个原因,以前没有用过?=
muler1988 2012-01-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ldh911 的回复:]
你的SQL语句要求从存储过程取得返回结果:
{?=call p_bi_cost_customer_slcbll(?,?,?)}

但这个存储过程不带任何返回,所以JDBC就傻眼了。

考虑去掉前面的 ?=
[/Quote]

up++
dracularking 2012-01-16
  • 打赏
  • 举报
回复
弄个同名(不同数据库)的或名字接近的存储过程,但内容可为空(保证存储过程本身不会导致错误),测试下

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧