问题场景
在初学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";