【问题标题】:JDBC connection object returns null in Servlet/Web applicationJDBC 连接对象在 Servlet/Web 应用程序中返回 null
【发布时间】:2017-04-15 04:12:00
【问题描述】:

我正在尝试将我的 Java Web 应用程序连接到 mysql 服务器。我正在部署在tomcat上。我有一个我创建的 JDBC 类,它在普通的 java 主程序中返回连接对象。但是,当我在已部署的 tomcat 应用程序上使用 JDBC 类时,它返回 null。我不明白这个。它将在 main 中返回连接,但不在 servlet/Web 应用程序中。谢谢。代码:

Registration.Servlet:

    Jdbc dbConn = new Jdbc();
    Connection con = dbConn.connect();
    String insert_member = "INSERT INTO Members (id, name, address, dob, "
            + "dor, status, balance)"  + " VALUES (?, ?, ?, ?, ?, ?, ?)";
    //String c = con.toString();
    //con = null for some reason
    pstmt = con.prepareStatement(insert_member);
    pstmt.setString(1, "coo");
    pstmt.setString(2, "aa");
    pstmt.setString(3, "26 road");
    pstmt.setDate(4, new java.sql.Date(new Date().getTime()));
    pstmt.setDate(5, new java.sql.Date(new Date().getTime()));
    pstmt.setString(6, "APPLIED");
    pstmt.setFloat(7, 10);
    pstmt.execute();

JDBC 类:

public class Jdbc {
Connection connection;
Statement statement;
ResultSet rs;

    public Jdbc() {
        String db = "xyz_assoc";
                try {
            Class.forName("com.mysql.jdbc.Driver");
            connection = DriverManager.getConnection
                ("jdbc:mysql://localhost:3306/"+db.trim(), "root", "");
        }
        catch(ClassNotFoundException cfe){    

        }
        //SQL exception
        catch (SQLException ex) {
            Logger.getLogger(Jdbc.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    //open connection to database
    public Connection connect(){
        return connection;
    }

    //execute mysql queryS
    public ResultSet executeQuery(String sql_query) throws SQLException {
        statement = null;
        statement = connection.createStatement();
        rs = statement.executeQuery(sql_query);
        return rs;
    }

    //close connection to database
    //destroy any remaining objects
    public void close() throws SQLException{
        statement.close();
        rs.close();
        connection.close();
    }

 }
}

堆栈跟踪:

2016 年 11 月 30 日上午 11:12:18 org.apache.catalina.core.ApplicationContext 日志信息:SessionListener:contextDestroyed() 2016 年 11 月 30 日上午 11:12:18 org.apache.catalina.core.ApplicationContext 日志信息:ContextListener: contextDestroyed() 2016 年 11 月 30 日上午 11:12:23 org.apache.catalina.core.ApplicationContext 日志信息:ContextListener: contextInitialized() 2016 年 11 月 30 日上午 11:12:23 org.apache.catalina.core.ApplicationContext 日志信息:SessionListener: contextInitialized() 2016 年 11 月 30 日上午 11:12:23 org.apache.catalina.core.ApplicationContext 日志信息:ContextListener: attributeAdded('org.apache.jasper.compiler.TldLocationsCache', 'org.apache.jasper.compiler.TldLocationsCache@7f4e2bf7')2016 年 11 月 30 日 上午 11:12:59 org.apache.catalina.core.StandardWrapperValve 调用 严重:Servlet.service() for servlet [Registration] 在上下文中 路径 [/XYZGroup] 抛出异常 [Servlet 执行抛出一个 异常],根本原因是 java.lang.ClassNotFoundException: 模型.jdbc 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720) 在 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571) 在 model.MemberManager.addMember(MemberManager.java:46) 在 web.Registration.processRequest(Registration.java:52) 在 web.Registration.doPost(Registration.java:101) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:646) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 在 org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) 在 org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) 在 org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) 在 org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) 在 org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503) 在 org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) 在 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) 在 org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) 在 org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) 在 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421) 在 org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070) 在 org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611) 在 org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:745)

【问题讨论】:

    标签: java mysql tomcat servlets jdbc


    【解决方案1】:

    最可能的原因是这行代码:

    connection = DriverManager.getConnection
                ("jdbc:mysql://localhost:3306/"+db.trim(), "root", "");
    

    正在引发异常并且未设置连接。您吞下了其中一个例外,即找不到驱动程序类的情况。你应该记录下来。然后再次运行它,您应该在日志中看到导致您的问题的异常。

    如果您能够为此附加调试器,则可以在该行之后设置断点并在执行后立即检查日志,从而更容易查看异常所在的位置。

    【讨论】:

      猜你喜欢
      • 2014-03-31
      • 2014-03-16
      • 1970-01-01
      • 2014-06-11
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 2010-09-12
      • 2018-07-11
      相关资源
      最近更新 更多