gpt4 book ai didi

java - Tomcat6 Java Servlet 服务于 mysql 命令?

转载 作者:行者123 更新时间:2023-11-28 22:36:08 24 4
gpt4 key购买 nike

我玩 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)

最佳答案

java.lang.ClassCastException: org.apache.tomcat.dbcp.dbcp.DelegatingStatement 
cannot be cast to com.mysql.jdbc.Statement

您在 dropTables(...) 方法中使用了 com.mysql.jdbc.Statement,但是在 con.createStatement( ) 不能单独为 MySQL 安全地转换。想象一下,如果您(有一天)更改了您的命名查找以返回 Oracle 数据库连接。也许现在您可以明白为什么强制转换本质上是不安全的。

使用通用的 java.sql.Statement。仔细检查您的导入并删除 MySQL 导入。当您需要支持的“下一个”数据库下线时,这样做将使您的代码更容易处理。

关于java - Tomcat6 Java Servlet 服务于 mysql 命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9082071/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com