没有找到JDBC的合适驱动程序
在本教程中,我们将看到如何解决 java.sql.SQLException: No suitable driver found for JDBC。
这个例外可能有多种原因,让我们一个接一个地查看。
连接器jar不在类路径classpath上
你需要确保你有 connector jar在类路上。
例如:如果我们正在使用 mysql要连接到数据库,然后 mysql-connector-java罐子应该在classpath上。
我们可以添加Maven依赖项如下所示:
<!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.19</version>
</dependency>
我们可以在此处找到jar的版本。
Jar不在Tomcat/JBoss 库中
如果我们使用的是Web服务器,例如 tomcat或者 JBoss,然后你应该把连接器罐放进去 server lib folder。
例如:如果我们使用Tomcat和MySQL,我们应该放置 mysql-connector-java在 $CATALINA_HOME/lib。
实际上,需要在实例化应用程序之前设置连接池。
这可能是原因,你需要把jar放在服务器lib文件夹中。
如果我们使用Eclipse来运行Tomcat,则Eclipse不会选择 $CATALINA_HOME/lib。
我们可以通过两种方式解决此问题:
- 点击
Open Launch Config- >classpath tab在类路径上设置MySQL-Connector-Java jar。 - 转到"服务器"选项卡并选择选项
Use Tomcat installation
在连接网址中的拼写错误
如果我们在拼写错误,也会出现此异常 jdbc url。
例如:假设你有 jdbc URL如下。
JDBC:mysql //localhost:3307/dbname
如果我们注意到,我们缺少 :在MySQL和URL应该是
JDBC:mysql://localhost:3307/dbname
没有调用class.forname()[旧的Java版本]
如果我们正在使用 java version less than 6或者没有使用 JDBC 4.0 compliant connector jar,然后你可以得到这个例外。
我们需要在调用之前注册驱动程序 DriverManager.getConnection();
让我们通过示例来理解:
Connection con = null;
try {
con = DriverManager.getConnection("jdbc:mysql//localhost:3307/dbname");
} catch (SQLException e) {
throw new RuntimeException(e);
}
上面的代码将给出错误,因为我们没有调用 Class.forName()在调用DriverManager.getConnection()之前。
我们可以解决错误:
Connection con = null;
try {
//registering the jdbc driver here
Class.forName("com.mysql.jdbc.Driver");
con = DriverManager.getConnection("jdbc:mysql//localhost:3307/dbname");
} catch (SQLException e) {
throw new RuntimeException(e);
}
如果我们使用的是java 6或者以上和最新版本的mysql-connector-java,那么我们不会因为 Class.forName()而得到这个异常。

