java.sql.SQLException: No suitable driver 问题解决

问题出现

自己在写一个连接C3P0数据库连接池库的测试类,运行该类后出现了下图这个问题

这是我写的测试类

package demo;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class test {
    public static DataSource ds = null; // 声明一个数据源
    static {
        ds = new ComboPooledDataSource();
    }

    public static void main(String[] args) throws SQLException {
        Connection conn = ds.getConnection();
        System.out.println(conn);
        if (conn!= null) {
            System.out.println("连接成功");
        } else {
            System.out.println("连接失败");
        }
    }
}

运行这个Java文件,控制台在这里卡了很久... 

大概10秒之后就出现了这样的问题:java.sql.SQLException: No suitable driver

到控制台的末尾就直接结束了,即运行这个Java代码没有成功


分析与解决

我试过了以下方法,都没有成功解决:

1. c3p0-config.xml 文件是否有书写错误

但检查后,并没有哪里写错,排除

<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
	<default-config>
		<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/company?serverTimezone=UTC&amp;useUnicode=true&amp;characterEncoding=utf-8</property>
		<property name="user">root</property>
		<property name="password">2076805863</property>
	</default-config>
</c3p0-config>

2. 没有将mysql-connector-java-****-bin.jar包加入到Java运行环境的外部jar包的存放的位置。或者没有Build Path

我的相关jar都是通过maven里的pom联网导入下载的,项目结构里也显示有相关jar包,排除

项目结构如下:

3. 驱动jarbao版本不兼容

这个我自己也排查过了,MySQL版本是8.0.33,jar包版本也是8.0.33,不是不兼容的问题,排除


具体我是怎么解决的,是我自己先写了个测试类,如下

package demo;

import com.mchange.v2.c3p0.ComboPooledDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

public class test {
    public static DataSource ds = null; // 声明一个数据源
    static {
        ds = new ComboPooledDataSource("test");
    }

    public static void main(String[] args) throws SQLException {
        Connection conn = ds.getConnection();
        System.out.println(conn);
        if (conn!= null) {
            System.out.println("连接成功");
        } else {
            System.out.println("连接失败");
        }
    }
}

再到 c3p0-config.xml 文件下加上这个相关的内容:

当我在点击test类测试的时候,控制台出现了下面这样的新问题:

虽然还是没有运行成功,但是多了个新问题。这也就代表着我刚刚在c3p0-config.xml 文件下添加的内容是无效的,系统没有识别到。

所以我就想,是不是我 c3p0-config.xml 文件放错位置了

因为我的IDEA是2023版本的,项目结构目录是这样的:

我是直接把这个xml文件放在了src里面,出现刚才那样的新问题应该是我整个xml文件是无效的。

所以我把xml文件移动到了src 下面的 main 下面的 resources文件夹下,没有放在那个META-INF文件夹下,如下图:

再去运行刚才的test.java文件,结果运行成功,唰的一下,很快~~~


总结

所有以后看到了java.sql.SQLException: No suitable driver的问题

从以下方法找问题:

1. c3p0-config.xml 文件是否有书写错误

2. 没有将mysql-connector-java-****-bin.jar包加入到Java运行环境的外部jar包的存放的位置。或者没有Build Path

3. 驱动jarbao版本不兼容

4. c3p0-config.xml 文件的位置是否放错地方

我的原因就是放错了地方,但是好像早期IDEA版本是可以直接将c3p0-config.xml文件放在  src根目录下的,应该是IDEA版本问题,对,就是这个

  • 25
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当出现java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/mydb?异常时,通常是因为JDBC驱动程序没有正确加载。要解决这个问题,可以按照以下步骤进行操作: 1. 确保已经正确安装了MySQL数据库,并且已经下载了MySQL JDBC驱动程序。 2. 将MySQL JDBC驱动程序的jar包添加到项目的classpath中。可以将jar包复制到项目的lib目录下,然后在项目的构建路径中添加该jar包。 3. 在代码中加载MySQL JDBC驱动程序。可以使用以下代码加载驱动程序: ```java Class.forName("com.mysql.jdbc.Driver"); ``` 4. 确保JDBC连接字符串的格式正确。连接字符串应该以jdbc:mysql://开头,后面跟着主机名、端口号、数据库名称等信息。例如: ```java String url = "jdbc:mysql://localhost:3306/mydb"; ``` 5. 创建数据库连接并执行SQL语句。可以使用以下代码创建连接: ```java Connection conn = DriverManager.getConnection(url, username, password); ``` 其中,url是JDBC连接字符串,username和password是数据库的用户名和密码。 然后,可以使用Statement或PreparedStatement对象执行SQL语句,例如: ```java Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("SELECT * FROM mytable"); ``` 或者: ```java PreparedStatement pstmt = conn.prepareStatement("INSERT INTO mytable VALUES (?, ?)"); pstmt.setString(1, "value1"); pstmt.setString(2, "value2"); pstmt.executeUpdate(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨空集

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值