Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC4和Class.forName_Java_Postgresql_Servlets - Fatal编程技术网

Java JDBC4和Class.forName

Java JDBC4和Class.forName,java,postgresql,servlets,Java,Postgresql,Servlets,我编写了一些代码,通过最新的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 fo

我编写了一些代码,通过最新的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

编辑:忘了提一下,我正在使用Java7

一些更新:

在Tomcat中,这似乎是一个相当常见的问题。根据本文和其他文章的建议,我已经将JAR从WEB-INF/lib中移出。即使在Tomcat_HOME/lib中使用它,我也需要使用Class.forName()。有点奇怪,我想这与Tomcat注册类的方式有关

找到这篇文章,这正是mySQL JDBC驱动程序而不是postgreSQL的问题:


感谢大家的帮助。在学习如何设置JNDI数据源时,我在Tomcat 7文档中找到了确切的情况和答案:

简而言之,在这些情况下,即使您在Tomcat7上使用JDBC4,也需要使用Class.forName注册驱动程序

谢谢大家为我指明了正确的方向!
TR

您是否在独立Java程序中使用其他方法加载类org.postgresql.Driver,比如创建它的对象,或者其他什么?有趣的问题,请注意。这似乎在Tomcat中很常见,而不是特定于postgresql。请看一看是否有帮助。不要将jdbc驱动程序放在web inf/lib中,请参阅URL i没关系。我正在运行的测试只是执行一个SELECT VERSION(),我没有命中用户定义的DB,只是不需要指定的postgreSQL系统DB。你是对的,不过通常在主机之后需要一个DB。