0

我正在使用轴 2 和 apache tomcat 在 eclipse helios 中学习 Web 服务。我有两个带有 java 类的动态 web 项目,当我在 eclipse 中将它们作为简单的 java 类运行时,它们成功连接到两个数据库。(我已将外部 jar 添加到项目的外部构建路径中)。但是当我在服务器上运行时,我得到一个错误:No suitable driver found. 我知道我需要加载必要的驱动程序并且apache-tomcat-6.0.36/lib我已经这样做了(并重新启动了服务器)。(请参阅未找到合适的驱动程序)。

我使用此语句在我的 Java 类中创建驱动程序:

Class.forName("org.postgresql.Driver"); //throws class not found exception w/message "com.postgresql.jdbc.Driver"
conn = DriverManager.getConnection(url, user, password);

为什么 apache 不“看到”其 /lib 文件夹中的 .jar 驱动程序?一些较旧的教程说将 .jars 放在 common/lib 中——但我在我的 apache tomcat 目录结构中看不到该文件夹​​。我能做些什么来调试这个问题?

4

2 回答 2

1

根据您使用的 Java 版本(以及 JDBC 版本),您可能需要Class.forName()在调用DriverManager.getConnection(...). 这会强制 JVM 加载该类,以便 JDBC 知道该类是您的连接类型的驱动程序。否则,JDBC 不知道您的数据库类型的驱动程序,因此会吐出“找不到合适的驱动程序”。

如果您使用 Java 7(因此使用 JDBC 4.0)在 Eclipse 中运行您的类,那么在您的类路径中找到的驱动程序会自动加载。对于 7 之前的 Java 版本(因此 4.0 之前的 JDBC),您必须手动注册您的驱动程序,就像解释的那样。有关详细信息,请参阅JDBC 教程

于 2013-04-10T13:08:11.160 回答
0

如果此行未注释${CATALINA_HOME}/conf/server.xml

  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />

将其更改为:

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" driverManagerProtection="false" />

这将使 Tomcat 恢复pre-6.0.35正常功能,它在${CATALINA_HOME}/lib.

于 2013-08-06T21:11:59.360 回答