idea中加载jdbc驱动mysql-connector-java-8.0.15方式

本文详细解析了在Java项目中动态加载MySQL驱动时遇到的ClassNotFoundException异常,并提供了有效的解决方案。通过对比控制台手动编译和IDEA编译的不同,深入探讨了问题根源及正确导入驱动jar包的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、问题说明

  在加载驱动时,使用Class.forName("com.mysql.cj.jdbc.Driver")动态加载驱动类时,报了异常。分析肯定是驱动类没有导入好,也就是jar包导入的有问题。

1.1 问题截图和代码

在这里插入图片描述

package cn.edu.ucas.hyk.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 * @Author: hyk
 * @Date: 2020/8/1
 * @version: 1.0
 */
public class JDBCUtils {
    static String jdbcName = "com.mysql.cj.jdbc.Driver";
    static String dbUrl = "jdbc:mysql://localhost:3306/db_test?useSSL=false&serverTimezone=UTC";
    static String dbUserName = "root";
    static String dbPassword = "123456";
    public static Connection getConnection(){
        try {
            Class.forName(jdbcName);
            return DriverManager.getConnection(dbUrl,dbUserName,dbPassword);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            return null;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
            return null;
        }
    }

}
package cn.edu.ucas.hyk.jdbc;

import java.sql.*;

/**
 * @Author: hyk
 * @Date: 2020/7/31
 * @version: 1.0
 */
public class MyJDBC {

    private static ResultSet rs;
    private static Connection conn;
    private static PreparedStatement ps;

    public static void main(String[] args) {
        conn = JDBCUtils.getConnection();
        try {
            ps = conn.prepareStatement("SELECT * FROM pet WHERE name = ?");
            ps.setString(1,"Fluffy");
            rs = ps.executeQuery();
            while (rs.next()){
                System.out.println(rs.getString(1));
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }

    }
}

二、解决方案

  先给出解决方法:参考解决方案中,方式二的截图

通过 File -> Project Structure -> Module -> Dependencies -> +方式添加依赖并不凑效,依然报ClassNotFound异常。
凑效的解决方式是右键你的Module -> 新建libs文件夹 -> 将驱动jar包拷过来 -> 右键libs文件夹 -> Add As Library

  通过这里便可以解决问题,接下来的部分旨在记录解决和分析错误的思路,以及体会java源文件的编译执行过程。

2.1 控制台手动编译

  为了验证问题,控制台手动编译来作为对比。先说明编译任务,我要编译的是两个文件,JDBCUtils.javaMyJDBC.java两个文件。

2.1.1 javac *.java

  这里是在idea的项目路径下进行编译的,注意.java源文件位置。因为Class.forName("com.mysq.jdbc.Driver")是动态加载的,所以毫无疑问,javac命令可以完成。
在这里插入图片描述

2.1.2 java cn.edu.ucas.hyk.jdbc.MyJDBC

  注意这里的路径!!!执行java命令是需要结合包名的问题的,还有java命令是要到classpath环境变量下寻找.class文件,我这里配置了.\代表当前路径。
在这里插入图片描述

在这里插入图片描述
  毫无疑问,因为手动编译时并不知道jdbc.Driver驱动的存在,必然会报错。

2.2 使用Idea进行编译

  使用Idea进行编译时,我按照网上总结的方法出现了问题,至今仍没有发现原因。方式一有问题,方式二成功。

2.2.1 方式一

  网上惯有导入jdbc驱动的方式。但是我这里导入后仍然会报ClassNotFound的错误。看着下面熟悉的异常错误,跟控制台的java命令手动编译如此雷同,说明这种方式并没有导入成功,至少在虚拟机执行时,意识不到Driver类的存在。但这种方式又是网上满天飞的jdbc驱动导入方式,可能这种方式本身没问题,而是我哪里出了错误,先待定吧,解决了再来更改。
在这里插入图片描述
在这里插入图片描述

2.2.2 方式二

  这种方式简单粗暴,也正是这种方式在我的Idea中有效。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值