解决java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

问题场景

在初学spring boot框架时,尝试连接MySQL数据库,运行报错java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

代码如下

package com.example.demo06;

import com.alibaba.fastjson.JSONObject;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
public class TestController {

    @RequestMapping("/test")
    public String Hello(){
        System.out.println("here is me");
        return "Hello!";
    }
    @RequestMapping("/get_record")
    public JSONObject GetRecord(){
        JSONObject json=new JSONObject();
        //
        String url="jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai";
        String username="root";
        String password="xxx";
        try {
            Class.forName("com.mysql.cj.jdbc.driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        Connection connection=null;
        try {
            connection= DriverManager.getConnection(url,username,password);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        Statement statement=null;
        try {
            statement=connection.createStatement();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        String sql="select * from device_file order by device_name";
        List list=new ArrayList();
        try {
            ResultSet rs=statement.executeQuery(sql);
            while(rs.next()){
                Map map=new HashMap();
                map.put("device_id",rs.getString("device_id"));
                map.put("device_name",rs.getString("device_name"));
                map.put("device_type",rs.getString("device_type"));
                map.put("create_time",rs.getString("create_time"));
                list.add(map);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        json.put("aaData",list);
        json.put("result_code",0);
        json.put("msg","ok");
        //
        return json;
    }

}

报错java.lang.ClassNotFoundException: com.mysql.jdbc.driver

问题思考

错误信息很明显就是没找到MySQL的连接件的驱动,但是在新建项目时勾选了MySQL的driver,理应有MySQL的依赖,检查pom.xml文件

也是有依赖的,那么可能需要手动下载依赖?

我的MySQL版本是8.0.26,在尝试下载连接件并将其添加到lib中后问题依然存在。说明问题不在这

最后仔细检查代码发现错误

问题解决

可能细心的同学已经发现了,我在写Driver链接时

把driver的d写成了小写,实际应该是大写,错误很小,但是发现的过程很曲折,还是太粗心了

反思

在找解决问题的方案的过程中,另外发现不同版本的MySQL,连接件的驱动目录不同,

在8.0以上的版本中,

try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

在较低版本比如5.0中

try {
            Class.forName("com.mysql.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }

且8.0版本及以上在连接时要加上时区

String url="jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai";

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值