gpt4 book ai didi

java - JDBC4 和 Class.forName

转载 作者:搜寻专家 更新时间:2023-11-01 03:51:19 26 4
gpt4 key购买 nike

我编写了一些代码,通过其最新的 JDBC4 驱动程序连接到 PostgreSQL 9.4 数据库。我的理解是 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?

最佳答案

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

http://tomcat.apache.org/tomcat-7.0-doc/jndi-datasource-examples-howto.html#DriverManager,_the_service_provider_mechanism_and_memory_leaks

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

感谢大家给我指出正确的方向!TR

关于java - JDBC4 和 Class.forName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27206902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com