我已经知道从 JDBC 4.0. 和 JDK 6 开始,在类路径中找到的驱动程序会自动加载。这就是我们在创建 JDBC 连接时习惯忽略 Class.forName(dbDriver);
代码行的原因。
但最近我安装了MySQL Server 8.0.11,并在运行于<上的简单Servlet项目中将驱动程序更新为mysql-connector-java:8.0.11
tomcat 8.5.30。但这给了我臭名昭著的异常(exception)
java.sql.SQLException: No suitable driver found for
jdbc:mysql://localhost:3306/mysql at ...
但是我的所有代码之前都工作正常。然后我添加了 Class.forName("com.mysql.jdbc.Driver");
而且它有效。我想我没有错过任何事情。谁能给我解释一下这可能是什么原因?
最佳答案
仅当驱动程序 jar 位于应用程序的初始(系统)类路径上时,JDBC 4.0(及更高版本)自动驱动程序加载才起作用。如果您使用 Tomcat,驱动程序必须位于 <catalina-home>/lib
中文件夹。
如果您将驱动程序与应用程序一起部署,则驱动程序位于该特定应用程序的上下文类路径上,并且需要使用 Class.forName
显式加载它。 .
但实际上,您不应该使用 DriverManager.getConnection
在 Web 应用程序中创建连接。您应该使用数据源(最好使用连接池),该数据源可以在代码中创建和初始化,也可以在 Tomcat 的上下文或服务器配置中创建和初始化。在这种情况下,这个问题甚至不会出现,因为要么数据源已经知道如何获取驱动程序,要么您必须使用驱动程序显式配置它才能使用。
关于java - mysql-connector 8.0需要通过 `Class.forName()`注册驱动程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50433645/