问题
安装了一个MySQL数据库,然后navicat连接数据库一点问题没有。但是通过Java的jdbc连接却怎么都建立不了连接。
连接MySQL会报错Unable to load authentication plugin ‘caching_sha2_password’
原因是MySQL在8.0后验证方式由mysql_native_password变为caching_sha2_password,所以连接时会报这个错。
数据库用的是Mysql8版本,但工程里面mysql驱动包却是5.1.37版本。
解决办法
只需修改驱动包为8.0.11版本即可。
而驱动的包也由原来的:mysql-connector-java-5.1.28-bin.jar
换成了:mysql-connector-java-8.0.11.jar。
mysql-connector-java-8.0.11.jar下载地址https://dev.mysql.com/downloads/file/?id=477058
直接下载即可
此Mysql8.0连接JDBC驱动需要注意以下几点:我的博客
如果是maven引入,则需要由:
<!-- mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.37</version>
</dependency>
**改为:**
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.11</version>
</dependency>
在mybatis逆向工程里面配置改成如下:
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/taobao" userId="root"
password="aaaaaa">
</jdbcConnection>
JDBC:
import java.sql.*;
public class jdbc{
public static void main(String[] args){
//导入jar包,添加libray
// 驱动程序名
String driver = "com.mysql.jdbc.Driver";
// URL指向要访问的数据库名scutcs(首先要创建数据库)
String url = "jdbc:mysql://127.0.0.1:3306/scutcs";
// MySQL配置时的用户名
String user = "root";
// MySQL配置时的密码
String password = "517818li";
try {
// 加载驱动程序
Class.forName(driver);
// 连续数据库
Connection conn = DriverManager.getConnection(url, user, password);
if(!conn.isClosed())
System.out.println("Succeeded connecting to the Database!");
// statement用来执行SQL语句
Statement statement = conn.createStatement();
// 要执行的SQL语句
String sql = "select * from student";
// 结果集
ResultSet rs = statement.executeQuery(sql);
System.out.println("-----------------");
System.out.println("执行结果如下所示:");
System.out.println("-----------------");
System.out.println(" 学号" + "\t" + " 姓名");
System.out.println("-----------------");
String name = null;
while(rs.next()) {
// 选择sname这列数据
name = rs.getString("sname");
// 首先使用ISO-8859-1字符集将name解码为字节序列并将结果存储新的字节数组中。
// 然后使用GB2312字符集解码指定的字节数组
// name = new String(name.getBytes("ISO-8859-1"),"GB2312");
// 输出结果
System.out.println(rs.getString("sno") + "\t" + name);
}
rs.close();
conn.close();
} catch(ClassNotFoundException e) {
System.out.println("Sorry,can`t find the Driver!");
e.printStackTrace();
} catch(SQLException e) {
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
}
}
执行结果:
Succeeded connecting to the Database!
执行结果如下所示:
学号 姓名
0417101 李蒙
0417102 李蒙
Process finished with exit code 0