我正在尝试在 Eclipse IDE 和 Ubuntu 20.04 操作系统中使用 Java 和 MySQL 创建 JDBC 应用程序。
我在连接到数据库时遇到非常常见的错误,即“java.sql.SQLException:用户'root'@'localhost'访问被拒绝(使用密码:YES)”,并且我已经尝试了堆栈中的所有可能的解决方案溢出了答案、YouTube 视频、文章等,但似乎没有任何效果。
错误:
我的java代码:
package jdbcDemo;
import java.sql.*;
public class jdbcConnect {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/jdbcDemo";
String user = "root";
String pswd = "1234";
Connection con = DriverManager.getConnection(url, user, pswd);
if(con == null) {
System.out.println("Connection not established");
}
else {
System.out.println("Connection established");
}
}
}
我的数据库中的用户:
数据库信息:
连接详细信息(mysql工作台截图):
我正在尝试通过用户 “root” 访问数据库,该用户的密码为 “1234”,插件为 “mysql_native_password”。 我正在尝试与具有 student 表的 jdbcDemo 数据库建立连接。
我能够通过 CLI 和 Workbench 使用相同的用户和密码成功访问和操作数据库,但在 JDBC 中一次又一次出现相同的错误。
到目前为止我尝试过的一些解决方案不起作用:
所有解决方案要么过时、不起作用,要么特定于 Windows 操作系统。
请建议一些解决方案来解决 Ubuntu 20.04 中的此问题或执行此任务的不同替代方案(远程数据库等)
提前致谢!
在application.properties中添加以下语句:
server.port = 8034
如果您正在运行其他可能正在使用端口 8080 的应用程序。
这帮助我解决了这个问题,我花了几个小时才找到这个解决方案。
希望它对某人有帮助。
尝试这样做
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'127.0.0.1';
执行这条sql语句:
update mysql.user set host = '%' where user = 'root' and host = 'localhost';
flush privileges;
然后再试一次。它在类似的情况下对我有用。祝你好运!
那是密码的问题,尝试更改密码的符号。
我在引入像“€”这样的符号时遇到错误
如果您尝试连接到容器化数据库,您可能已经在端口 3306 上运行了本地 SQL 服务器 - 特别是如果您刚刚在本地安装了
mysql
。
您可以通过运行来检查:
sudo service mysql status # Linux
brew services info mysql # Mac
如果是这种情况,您的 Spring 应用程序可能会无形地连接到您计算机上的默认
mysql
实例,而不是您的容器化数据库。
要停止默认的
mysql
实例,
sudo service mysql stop # Linux
brew services stop mysql # Mac
要禁用自动启动,
sudo systemctl disable mysql # Linux
launchctl unload -w ~/Library/LaunchAgents/com.mysql.mysqld.plist # Mac
您可以通过
telnet
-ing 来确认端口 3306 上没有其他任何东西正在运行:
telnet localhost 3306
重新启动 Docker 容器并尝试连接。
从这里为开发人员安装 mysql-server:https://dev.mysql.com/downloads/file/?id=526407 并根据您的属性(用户名和密码)进行配置