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