java连接mysql数据库遇到的坑

我的环境:

          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

https://blog.csdn.net/cocoaxian/article/details/72235495

https://www.cnblogs.com/centor/p/6142775.html

发布了38 篇原创文章 · 获赞 18 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43851639/article/details/89188677