1

我正在尝试构建一个登录注册 Web 应用程序,它基本上允许用户在数据库上注册,然后允许他们登录。我已经编写了所有代码,并且我正在尝试将我的程序连接到我的数据库。这是我收到的错误:

Exception

javax.servlet.ServletException: Servlet execution threw an exception
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

Root Cause

java.lang.NoClassDefFoundError: java/sql/Driver

我已将所有 Postgres、Tomcat 和 SQL 连接器/驱动程序 jar 添加到我classpath和我的WEB-INF/lib文件夹中。我不确定还能做什么。我已经尝试用另一个类进行测试,并且能够连接到我的数据库。我也对我的连接 URL 进行了三次检查。怎么了?

谢谢!

4

1 回答 1

0

我知道这与 Servlet 无关,但我在使用 SQLite 的模块应用程序中遇到了同样的问题:

Exception in thread "main" java.lang.NoClassDefFoundError: java/sql/Driver
at java.base/java.lang.ClassLoader.defineClass1(Native Method)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1095)
at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:206)
at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:759)
at java.base/jdk.internal.loader.BuiltinClassLoader.findClassInModuleOrNull(BuiltinClassLoader.java:680)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:605)
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:579)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:315)
...
Caused by: java.lang.ClassNotFoundException: java.sql.Driver
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
... 14 more

一开始有点疑惑,但我终于想通了。我只需要将java.sql的requires语句添加到:module-info.java

module mymodule {
    ...
    requires sqlite.jdbc;
    requires java.sql;
}

需要的 sqlite.jdbc已经在那里,为了清楚起见将其添加到上面)

于 2020-05-17T18:49:08.680 回答