jdbc连mysql报错:java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Drive
今天跟着课程做jdbc入门不明白为什么一直报错。
我的初始代码如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import org.junit.jupiter.api.Test;
import com.mysql.jdbc.Driver;
public class JDBCdemo1 {
@Test
public void demo1() {
/*
* 1.加载驱动
* 2.获得链接
* 3.创建执行SQL语句的对象,执行SQL
* 4.释放资源
*/
try {
//1.加载驱动
Class.forName("com.mysql.cj.jdbc.Drive");
//2.获得链接
Connection conn=DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/jdbctest", "root", "root");
//3.创建执行SQL语句的对象,执行SQL
//3.1创建SQL对象
String sql="select * from user";
Statement stmt=conn.createStatement();
//3.2执行SQL
ResultSet resultset=stmt.executeQuery(sql);
while(resultset.next()) {
int uid=resultset.getInt("uid");
String username=resultset.getString("username");
String password=resultset.getString("password");
String name=resultset.getString("name");
System.out.println(uid+" "+username+" "+password+" "+name);
}
//4.释放资源
resultset.close();
stmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
后来发现是导入的jar包有问题,我的MySQL版本是8.0,但是jar包的版本是5。有意思的是我之前做的一个jdbc入门的demo也是8.0的版本用的5.0的jar包,成功运行,挺奇怪的。
先在命令行 select version();确认MySQL的版本。
然后下载8.0的jar包:下载链接
同时还要注意,8.0版本更换驱动为:
“com.mysql.cj.jdbc.Driver”
之前的“com.mysql.jdbc.Driver”已经不能在MySQL 8.0版本使用了,官方文档链接:https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-api-changes.html;
调整之后的代码为:
package com.imooc.jdbc.demo1;
import java.sql.*;
public class JDBCdemo1
{
public static void main(String[] args)
{
try
{
Class.forName("com.mysql.cj.jdbc.Driver"); //加载MYSQL JDBC驱动程序
System.out.println("Success loading Mysql Driver!");
}
catch (Exception e)
{
System.out.print("Error loading Mysql Driver!");
e.printStackTrace();
}
try
{
System.out.println("start connecting");
Connection connect = DriverManager.getConnection(
"jdbc:mysql://127.0.0.1:3306/jdbctest"+"?useSSL=false&serverTimezone=Hongkong&useUnicode=true&characterEncoding=utf-8","root","root");
//连接URL为 jdbc:mysql//服务器地址/数据库名 ,后面的2个参数分别是登陆用户名和密码
System.out.println("Success connect Mysql server!");
Statement stmt = connect.createStatement();
ResultSet rs = stmt.executeQuery("select * from user");
//user 为你表的名称
while (rs.next())
{
String uid = rs.getString("uid");
String name = rs.getString("name");
String username = rs.getString("username");
System.out.println("uid:" + uid +""
+ "\t" + "name:" + name + "\t" + "username:"+ username + "\n" );
}
rs.close();
connect.close(); // 关闭连接
}
catch (Exception e)
{
System.out.print("get data error!");
e.printStackTrace();
}
}
}
如果url写为:“jdbc:mysql://127.0.0.1:3306/jdbctest” 出现报错:the server timezone value……
这个是常见问题,直接在url链接之后增加:"?useSSL=false&serverTimezone=Hongkong&useUnicode=true&characterEncoding=utf-8"