Servlets SQLException:servlet中缺少定义

Servlets SQLException:servlet中缺少定义,servlets,sqlexception,Servlets,Sqlexception,我正在使用jsp和servlet开发一个web应用程序,使用oracle.jdbc.OracleDriver。这段代码在我的PC上运行良好,但当尝试在其他服务器上部署应用程序的构建时,我遇到了如下异常 java.sql.SQLException: Missing defines at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:158) at oracle.jdbc.driver.DatabaseEr

我正在使用jsp和servlet开发一个web应用程序,使用oracle.jdbc.OracleDriver。这段代码在我的PC上运行良好,但当尝试在其他服务器上部署应用程序的构建时,我遇到了如下异常

java.sql.SQLException: Missing defines
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:158)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:206)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:305)
at oracle.jdbc.driver.OracleStatement.prepareAccessors(OracleStatement.java:793)
at oracle.jdbc.driver.T4CResultSetAccessor.getCursor(T4CResultSetAccessor.java:235)
at oracle.jdbc.driver.ResultSetAccessor.getObject(ResultSetAccessor.java:95)
at oracle.jdbc.driver.OracleCallableStatement.getObject(OracleCallableStatement.java:1947)
at org.apache.tomcat.dbcp.dbcp.DelegatingCallableStatement.getObject(DelegatingCallableStatement.java:143)
at cwep.Login.processRequest(Login.java:127)
at cwep.Login.doPost(Login.java:198)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
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:175)
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:263)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:852)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:584)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1508)
at java.lang.Thread.run(Unknown Source)
调试完应用程序后,我发现当我在服务器端调用数据库(Oracle10g)过程并使用
callableStatement.registerOutParameter(1,OracleTypes.cursor)
获取游标时,我在
callableStatement.execute()语句

protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
static String CNPOOL = "cnpool";//Getting CNPOOL correctly for database connection
 CallableStatement cs = null;
 static DataSource dataSource;//Declared as global
        response.setContentType("text/html;charset=UTF-8");

            PrintWriter out = response.getWriter();
            CallableStatement cs = null;
            String str = conectionPool;
            System.out.println(str);
            try {
            InitialContext initContext = new InitialContext();
            Context context = (Context) initContext.lookup("java:/comp/env");
            dataSource = (DataSource) context.lookup(str);
            System.out.println(" CxN Pool " + str);
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            ecode = Integer.parseInt(username);
            System.out.println(" eCode " + ecode);
            try {
                con = ConnectionBean.getConnection(dataSource);
                System.out.println(" CxN " + con.toString());
            } catch (Exception e) {
                System.out.println(" Opening the Cxn 1st Time" + e);
            }
            if(con!=null)
            {
            System.out.println(" Before Calling proc_user_login " + ecode);
            cs = con.prepareCall("{call proc_user_login(?,?,?,?,?)}");
            cs.setInt(1, empcode);
            cs.setString(2, password);
            cs.registerOutParameter(3, Types.NUMERIC);
            cs.registerOutParameter(4, Types.NUMERIC);
            cs.registerOutParameter(5, Types.VARCHAR);
            try {
                cs.execute();
            } catch (Exception e) {
                System.out.println("--------------------After executing first proc----------------------- ");
            }
            int message = cs.getInt(3);

            if (message == 0) {

                cs = con.prepareCall("{call proc_get_XXXlist(?,?)}");
                cs.setInt(1, empcode);
                cs.registerOutParameter(2, OracleTypes.CURSOR);
                try {
                     System.out.println("Before executing XXXList proc ");
                    cs.execute();      //GETTING EXCEPTION AT THIS STATEMENT
                    System.out.println("After executing XXXList");
                } catch (Exception e) {
                    System.out.println("exception in After executing secod proc ");
                }
                ResultSet rset = (ResultSet) cs.getObject(2);
                Vector v1 = new Vector();
                Vector v2 = new Vector();
                Vector v3 = new Vector();
                while (rset.next()) {       
                    v1.addElement(rset.getString(1));
                    v2.addElement(rset.getString(2));
                    v3.addElement(rset.getString(3));
                }
                //rset.last();
                String[] str1 = new String[v1.size()];
                String[] str2 = new String[v2.size()];
                String[] str3 = new String[v3.size()];
                v1.copyInto(str1);
                v2.copyInto(str2);
                v3.copyInto(str3);

                request.setAttribute("ecode", Integer.toString(ecode));
                request.setAttribute("clientid", str1);
                request.setAttribute("constring", str2);
                request.setAttribute("URL", str3);
                RequestDispatcher rd = request.getRequestDispatcher("XXX.jsp");

                rd.forward(request, response);
                //response.sendRedirect("XXX.jsp");
            } else {
                response.sendRedirect("index.jsp?val=" + message);
            }

            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("EEE---" + e);
            Utility.log("FinalExceptionToServlet.namelookup:", e.toString(), "SERVER", "E");
        }
    }

在这段代码中,第一个数据库登录\u usr过程正确执行,但当尝试执行第二个过程(返回一个游标作为输出参数)时,我遇到上述异常。如果相同的代码在我的电脑上正常工作,那么为什么它在服务器端部署后试图执行callablestatement时抛出异常呢


提前感谢。

正如您之前提到的代码正在运行,这里的罪魁祸首可能是
OracleTypes
。作为它的抽象类,您需要它的正确和具体的实现,它是您的驱动程序

  • 验证您使用的JDBC驱动程序的版本和JDBC驱动程序的类型(瘦或OCI)
  • 从或下载新的jar
  • 另外,在查找驱动程序之前,请尝试使用
    oracle.jdbc.OracleTypes


    e、 g.
    cn.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR)

    最好也显示一些代码。将
    的代码发布在cwep.Login.processRequest(Login.java:127)的cwep.Login.doPost(Login.java:198)
    在这段代码中,第一个数据库登录\u usr过程正确执行,但在尝试执行第二个过程时,返回一个游标作为输出参数,我得到了上面的异常。如果相同的代码在我的电脑上工作正常,那么为什么在服务器端部署后尝试执行callablestatement时会引发异常。这里我使用的是Ojdbc14.jar和classes12.jar。是否有任何.jar不匹配。。???提前感谢。感谢您的回复。我尝试了cs.registerOutParameter(2,oracle.jdbc.OracleTypes.CURSOR);,但也有同样的例外。:(在我的应用程序类型JDBC驱动程序中:Thin,驱动程序名称:OracleJDBC驱动程序DriverVersion:10.2.0.1.0,任何建议都将不胜感激