没有找到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()
而得到这个异常。