我的环境:
mysql8.0数据库
JDBC驱动:JDBC驱动下载链接:http://dev.mysql.com/downloads/connector/j/
eclipse
正文:
第一步:为Java项目配置jdbc驱动。
将下载的驱动文件压缩包解压到你自己的文件夹下,我的是E:\jdbc驱动\mysql-connector-java-5.1.45,其中的jar文件是我们所需要的,接下来就是将jar文件添加到Java项目中。步骤如下:
右键Java项目名——>Build Path——>Add External Archives 然后选择你下载的jdbc驱动文件,选择.jar文件即可。
第二步:在mysql数据库中创建数据库my,创建表test,并插入数据。
1.创建表test:
CREATE TABLE test
(
tID char(20),
tName char(20)
);
2.插入数据:
INSERT INTO test VALUES('001','Mike');
INSERT INTO test VALUES('002','Frank');
INSERT INTO test VALUES('003','Anna');
第三步:连接数据库
代码如下:
package com.mysql.dlnu;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
public class MysqlTest {
public static void main(String[] args) {
// 加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("加载驱动成功");
} catch (Exception e) {
e.printStackTrace();
}
// 连接数据库
try {
String url = "jdbc:mysql://localhost:3306/my?useSSL=false";
String user = "root"; //数据库名字,系统提供
String password = "123456"; //数据库密码
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println("连接成功");
Statement stmt = conn.createStatement();
String sql = "select * from test";
ResultSet rs = stmt.executeQuery(sql);
System.out.println("-----------------");
System.out.println("执行结果如下所示:");
System.out.println("-----------------");
System.out.println("id" + "\t" + "name");
System.out.println("-----------------");
String name1 = null;
String id1 = null;
while (rs.next()) {
id1 = rs.getString("tID");
name1 = rs.getString("tName");
System.out.println(id1 + "\t" + name1);
}
rs.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
重点来了:编译后会抛出异常,异常翻译为:警告:不建议建立SSL连接而不需要服务器的身份验证。根据MySQL 5.5.45 +、5.626+和5.7.6+的要求,如果没有设置显式选项,默认情况下必须建立SSL连接。对于不使用SSL的现有应用程序,ValuyServer证书属性设置为“false”。您需要通过设置USESL= false来显式禁用SSL,或者设置USELS=真,并为服务器证书验证提供信任存储。
解决办法为:把String url = "jdbc:mysql://localhost:3306/my"
改为String url = "jdbc:mysql://localhost:3306/my?useSSL=false",即在后面添加"?useSSL=false"即可。
本以为会大功告成,但编译后又抛出了另一个异常,异常翻译为:mysql无法加载身份验证插件“caching_sha2_password”。
这是因为mysql8.0版本认证方式发生了变更,mysql提供了两种身份验证插件,如下:
- caching_sha2_password
- mysql_native_password
mysql8.0版本使用的是caching_sha2_password身份验证,我们需要将身份验证插件改为mysql_native_password。
更改方法如下:
进入mysql数据库
1.更改加密方式:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
2.更改密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
3.刷新:
FLUSH PRIVILEGES;
查看修改结果,修改成功
mysql> use mysql;
Database changed
mysql> select host, user, plugin from user;
+-----------+------------------+-----------------------+
| host | user | plugin |
+-----------+------------------+-----------------------+
| % | root | caching_sha2_password |
| localhost | mysql.infoschema | caching_sha2_password |
| localhost | mysql.session | caching_sha2_password |
| localhost | mysql.sys | caching_sha2_password |
| localhost | root | mysql_native_password |
最后编译终于成功并显示了数据库中的数据。
截图如下:
最后附上解决问题参考的博客,谢谢他们。
https://www.cnblogs.com/shiysin/p/shiysin.html