我正在尝试将我的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)
答案 0 :(得分:0)
最可能的原因是这行代码:
connection = DriverManager.getConnection
("jdbc:mysql://localhost:3306/"+db.trim(), "root", "");
抛出异常但没有设置连接。你吞下了一个例外,即无法找到驱动程序类的情况。你应该记录下来。然后再次运行它,您应该在日志中看到导致您的问题的异常。
如果能够将调试器附加到此,则可以在该行之后设置断点并在执行后立即检查日志,从而更容易查看异常的位置。