异常信息:
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>
我其他表也是这样操作的能正常查询,只有这个一直报这个错,请问是我代码有问题,还是存贮过程的原因,存贮过程具体怎么写的我不清楚,我只负责调用,放到数据库里面直接执行存贮过程是正常的,能查出东西

解决方案 »

  1.   

    你的SQL语句要求从存储过程取得返回结果:
    {?=call p_bi_cost_customer_slcbll(?,?,?)}但这个存储过程不带任何返回,所以JDBC就傻眼了。考虑去掉前面的 ?=
      

  2.   

    若如此,基本上确定是存储过程本身的问题了
    我猜测是不是存储过程中某一句sql不返回结果集而暴露的问题
    看看这样是不是有用:
    http://hedyn.iteye.com/blog/856040
      

  3.   

    你的SQL语句要求从存储过程取得返回结果:
    {?=call p_bi_cost_customer_slcbll(?,?,?)}
    有返回resultset么 ? 如果没有 ,那就是没有了 
      

  4.   

    谢谢大家,问题解决了,只要在存贮过程前面加上SET NOCOUNT ON就可以了