JDBC连接对象在Servlet / Web应用程序

时间:2016-11-30 17:58:09

标签: java mysql tomcat servlets jdbc

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

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   log INFO:SessionListener:contextDestroyed()2016年11月30日上午11:12:18   org.apache.catalina.core.ApplicationContext log INFO:ContextListener:   contextDestroyed()2016年11月30日上午11:12:23   org.apache.catalina.core.ApplicationContext log INFO:ContextListener:   contextInitialized()2016年11月30日上午11:12:23   org.apache.catalina.core.ApplicationContext log INFO:SessionListener:   contextInitialized()2016年11月30日上午11:12:23   org.apache.catalina.core.ApplicationContext log INFO:ContextListener:   attributeAdded(' org.apache.jasper.compiler.TldLocationsCache&#39 ;,   ' org.apache.jasper.compiler.TldLocationsCache@7f4e2bf7')2016年11月30日   上午11:12:59 org.apache.catalina.core.StandardWrapperValve调用   严重:Servlet.service()用于上下文中的servlet [Registration]   path [/ XYZGroup]抛出异常[Servlet执行扔了一个   异常]与根本原因java.lang.ClassNotFoundException:   model.Jdbc at   org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)     在   org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)     在model.MemberManager.addMember(MemberManager.java:46)at   web.Registration.processRequest(Registration.java:52)at   web.Registration.doPost(Registration.java:101)at   javax.servlet.http.HttpServlet.service(HttpServlet.java:646)at at   javax.servlet.http.HttpServlet.service(HttpServlet.java:727)at   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)

1 个答案:

答案 0 :(得分:0)

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

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

抛出异常但没有设置连接。你吞下了一个例外,即无法找到驱动程序类的情况。你应该记录下来。然后再次运行它,您应该在日志中看到导致您的问题的异常。

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