我玩Java和mysql已有一段时间了。但是我第一次在Tomcat中使用它。命令是否相同,因为据我所知,它们不起作用。

到目前为止,我已经连接了它,我知道这是因为它可以最大化mysql连接,因此我必须关闭Tomcat。

这是我用于连接和放置表实验的代码:

public void connect() throws SQLException, NamingException{

    Context initCtx = new InitialContext();
    Context envCtx = (Context) initCtx.lookup("java:comp/env");
    DataSource ds = (DataSource) envCtx.lookup("jdbc/TestDB");
    con = ds.getConnection();

    dropTables("DROP TABLE test;");

    con.close();
}


public void dropTables(String query) throws SQLException{

    Statement st = (Statement)con.createStatement();
    st.executeUpdate(query);

}


取消对dropTables的注释后,我将获得HTTP 500。

有什么想法吗?

TIA

这是错误:

SEVERE: Servlet.service() for servlet myServlet threw exception
java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.DelegatingStatement cannot be cast to com.mysql.jdbc.Statement
    at myServlet.dropTables(myServlet.java:90)
    at myServlet.connect(myServlet.java:82)
    at myServlet.doPost(myServlet.java:50)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    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:191)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:470)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    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:298)
    at org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:431)
    at org.apache.coyote.ajp.AjpAprProtocol$AjpConnectionHandler.process(AjpAprProtocol.java:384)
    at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665)
    at java.lang.Thread.run(Thread.java:662)

最佳答案

您的代码在dropTables方法中引发异常。唯一的例外是暂停connect方法的执行并阻止您关闭连接。这样可以防止将连接返回到连接池,从而导致连接用尽。它还导致500错误。

您可以通过将ClassCastException更改为以下内容来修复dropTables

public void dropTables(String query) throws SQLException{
    con.createStatement().executeUpdate(query);
}


另外,我建议您将JDBC代码放在try-catch-finally块中,如下所示:

try{
    dropTables("DROP TABLE test;");
} catch (Exception e){
    e.printStackTrace();
} finally {
    con.close();
}

10-06 10:14