我知道NoClassDefFoundError:com / mysql / jdbc / StringUtils,但我的情况略有不同:我根本不使用MySQL。
我正在使用JDK 1.6处理PostgreSQL 9.1数据库。 在我的计算机上一切正常(PostgreSQL驱动程序已加载,没有类路径问题等),但我必须将我的项目上传到我的大学服务器,我收到以下错误:
java.lang.NoClassDefFoundError: Could not initialize class com.mysql.jdbc.StringUtils
这是一个完整的堆栈跟踪:
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:286)
java.sql.DriverManager.getConnection(DriverManager.java:582)
java.sql.DriverManager.getConnection(DriverManager.java:185)
elections.ConnectionManager.getConnection(ConnectionManager.java:29)
elections.daos.LoginDAO.login(LoginDAO.java:23)
elections.controllers.LoginController.doPost(LoginController.java:46)
javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
sun.reflect.GeneratedMethodAccessor35.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:274)
org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java:271)
java.security.AccessController.doPrivileged(Native Method)
javax.security.auth.Subject.doAsPrivileged(Subject.java:517)
org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:306)
org.apache.catalina.security.SecurityUtil.doAsPrivilege(SecurityUtil.java:166)
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:299)
org.apache.catalina.core.ApplicationFilterChain.access$000(ApplicationFilterChain.java:57)
org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:193)
org.apache.catalina.core.ApplicationFilterChain$1.run(ApplicationFilterChain.java:189)
java.security.AccessController.doPrivileged(Native Method)
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:208)
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
org.apache.coyote.ajp.AjpAprProcessor.process(AjpAprProcessor.java:197)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1770)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
java.lang.Thread.run(Thread.java:662)
这是我提供连接的类(这是我的第一个JDBC项目;我知道下面的代码不是线程安全的;我将使用连接池重写它,但首先我需要让它工作......)< / p>
static Connection conn;
public static Connection getConnection() throws Exception {
try {
String url = "jdbc:postgresql://host/database";
String username = "username";
String pwd = "password";
Class.forName("org.postgresql.Driver");
try {
conn = DriverManager.getConnection(url, username, pwd);
} catch (SQLException e) {
e.printStackTrace();
throw e;
}
} catch (ClassNotFoundException e) {
throw e;
}
return conn;
}
我在互联网上进行了大量搜索,但我似乎是世界上唯一一个有这样问题的人......其他人都只有MySQL这个问题。
我甚至尝试将MySQL驱动程序(包含缺少的com.mysql.jdbc.StringUtils类)放入WEB-INF / lib文件夹中,但这没有帮助。
我发现只有有用的信息可能是错误被隐藏在其他地方(这意味着com.mysql.jdbc.StringUtils依赖的某些类无法加载),但我不知道在哪里搜索。
我真的不明白为什么要搜索MySQL类,而我只使用PostgreSQL。
任何形式的帮助将不胜感激! :)
答案 0 :(得分:1)
JDBC 4.0自动发现可以自动扫描和加载JDBC驱动程序,我想即使程序从未使用过,DriverManager也会扫描并加载MySQL JDBC驱动程序。
然后我们可以猜测你的服务器为流行的数据库供应商保留了许多jdbc驱动程序。您可以在本地使用mysql进行测试,找出MySQL驱动程序无法正常工作的原因,然后您可以告诉服务器管理员更新mysql的驱动程序或设置。
答案 1 :(得分:1)
好的,结果是Tomcat Security Manager的权限问题。一旦管理员检查确切原因是什么,我会在这里发布并接受最佳答案。
答案 2 :(得分:0)
通常,JDBC驱动程序放在Tomcat SHARED库中。所以可能是你部署的tomcat在这里有一些libs搞乱了你的项目。
添加项目的WEB-INF / lib中缺少的lib无法解决问题,因为如果导致您遇到麻烦的代码试图使用其他类加载器中缺少的类,则可能无法看到您尝试提供的内容从您的应用“范围”。
因此,正如我假设您无法访问服务器的共享库,您应该在sys中看到这一点。管理员。