我编写了一些代码,通过其最新的JDBC4驱动程序连接到PostgreSQL 9.4 DB。我的理解是JDBC4不再需要样板“Class.forName(”org.postgresql.Driver“)驱动程序注册行。因此,我把它遗漏了。它工作正常。
然后我将相同的代码放在servlet中,将postgreSQL JDBC jar添加到WebContent / WEB-INF / lib中,但它没有说:
java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost/
当我添加Class.forName行时,它可以正常工作。
有没有人知道为什么这个JDBC4驱动程序在放入doGet()servlet方法时需要Class.forName,但是在基本的Java类中却没有?
谢谢, TR
编辑:忘记提及,我正在使用Java 7。
一些更新:
在Tomcat中,这似乎是一个相当常见的问题。根据这个和其他帖子的建议,我已经将JAR移出了WEB-INF / lib。即使在TOMCAT_HOME / lib中,我也需要使用Class.forName()。奇怪的是,我认为它与Tomcat注册类的方式有关。
发现这篇文章是mySQL JDBC驱动程序的确切问题,而不是postgreSQL:
When is Class.forName needed when connecting to a database via JDBC in a web app?
答案 0 :(得分:0)
感谢大家的帮助。在学习如何设置JNDI数据源时,我在Tomcat 7文档中找到了确切的情况和答案:
简而言之,在这些情况下,即使在Tomcat 7上使用JDBC4,也需要使用Class.forName注册驱动程序。
感谢大家指点我正确的方向! TR