oracle 包如下:
create or replace package pkg_user as
type users is ref cursor;
function getUser return users;
end;create or replace package body pkg_user is
function getUser return users is
c_user users;
begin
open c_user for select * from tbl_users;
return c_user;
end;
end;在SQL*PLUS中测试可以成功,在Java中测试也成功。
但在jsp中调用的时候却出现以下错误:
java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.DelegatingCallableStatement
jsp中的代码如下:
<%
Connection conn = DBPool.getPool().getConnection();
CallableStatement cstmt = conn.prepareCall("{?=call PKG_user.getUser()}");
cstmt.registerOutParameter(1,OracleTypes.CURSOR);
cstmt.executeQuery();
ResultSet rrs = ((OracleCallableStatement)cstmt).getCursor(1);
while(rrs.next()){
out.print(rrs.getString(1));
out.print(rrs.getString(2));
out.print(rrs.getString(3));
out.print("<br>");
}
conn.close();
%>出错的是加红的那一行,各位老大指点一下吧

解决方案 »

  1.   

    提示如下错误:
    exception org.apache.jasper.JasperException: Exception in JSP: /main/testpkg.jsp:3936:  CallableStatement cstmt = conn.prepareCall("{?=call PKG_user.getUser()}");
    37:  cstmt.registerOutParameter(1,OracleTypes.CURSOR);
    38:  cstmt.executeQuery();
    39:  ResultSet rrs = ((OracleCallableStatement)cstmt).getCursor(1);
    40:  while(rrs.next()){
    41:  out.print(rrs.getString(1));
    42:  out.print(rrs.getString(2));
    Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:451)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    root cause java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.DelegatingCallableStatement
    org.apache.jsp.main.testpkg_jsp._jspService(testpkg_jsp.java:108)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    note The full stack trace of the root cause is available in the Apache Tomcat/5.5.25 logs.
      

  2.   

    我用的是tomcat的数据池,现在我知道了应该是数据池的问题,但还不知道怎么解决。
      

  3.   

    ok,搞定,用连接池的数据源时就要把
    ResultSet   rrs   =   ((OracleCallableStatement)cstmt).getCursor(1); 
    改成
    ResultSet   rrs   =   (ResultSet) cstmt.getObject(1); 
    这样就行了。