没有找到JDBC的合适驱动程序

时间:2020-02-23 14:34:36  来源:igfitidea点击:

在本教程中,我们将看到如何解决 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()而得到这个异常。