以下代码:
Class.forName("com.mysql.jdbc.Driver");
Connection m_connection = DriverManager.getConnection("jdbc:mysql://localhost","root","root");
在getConnection()
:
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:919)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1694)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1244)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2397)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2430)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2215)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at db.Database.<init>(Database.java:91)
at db.Main.main(Main.java:10)
这是如何引起的?如何解决?
修改
public static void main(String[] args) throws ClassNotFoundException, ServletException, SQLException
{
try
{
Connection conn = (Connection) DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword");
Statement s = (Statement) conn.createStatement();
int result = s.executeUpdate("CREATE DATABASE databasename");
}
catch ( Exception e)
{
e.printStackTrace();
}
}
制作:
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4074)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4006)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:919)
at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1694)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1244)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2397)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2430)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2215)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:813)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:47)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at db.Main.main(Main.java:19)
答案 0 :(得分:45)
这可以帮到你:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '%password%' WITH GRANT OPTION;
使用命令行或某些GUI工具执行它。
不要忘记用真实密码替换%password%
。
答案 1 :(得分:11)
当您从头开始创建数据库时,您可以使用:
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword");
PreparedStatement ps = connection.prepareStatement("CREATE DATABASE databasename");
int result = ps.executeUpdate();
答案 2 :(得分:7)
我遇到了类似的问题,但不同之处在于:我没有从Model.updateOjects;
View.PaintingSheet.repaint();
Thread.sleep(x);
执行我的JavaApp,而是从远程PC执行。所以我有localhost
之类的东西
要解决此问题,您只需登录phpMyAdmin,转到java.sql.SQLException: Access denied for user 'root'@'a.remote.ip.adress' (using password: YES)
,单击Users
并输入要从中执行JavaApp的主机(或选择add user
)
答案 3 :(得分:5)
你可以用这个
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/YOUR_DB_NAME";
static final String USER = "root";
static final String PASS = "YOUR_ROOT_PASSWORD";
Connection conn = DriverManager.getConnection(DB_URL,USER,PASS);
你必须提供正确的root密码。
答案 4 :(得分:3)
这特定于Ubuntu 18.04 LTS和MySQL 5.x 关注了此link 从这里开始关注所有事情:
sudo mysql_secure_installation
sudo mysql
一旦登录到MySQL,然后在MySQL提示符下执行以下命令:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;
现在验证表是否具有根密码
SELECT user,authentication_string,plugin,host FROM mysql.user;
这解决了我的问题,现在我可以登录了。
答案 5 :(得分:2)
您应该指定要连接的数据库:
jdbc:mysql://localhost:3306/mydb
答案 6 :(得分:2)
我有同样的问题“java.sql.SQLException:访问被拒绝用户'root'@'localhost'(使用密码:YES)”。问题是“错误的密码”。将查询原样复制并粘贴到shell中,以检查它是否提供了所需的输出。小错误消耗更多时间。
答案 7 :(得分:1)
我遇到了同样的问题。添加了mysql服务端口号(3307),解决了问题。
conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/?" + "user=root&password=password");
答案 8 :(得分:1)
此异常也是由于mysql db和pom.xml / jar的版本不匹配引起的。
确保您的pom.xml / jar版本高于您的mysql db版本。 因为较高版本与较低版本兼容,但反之则不然。
java项目的解决方案
基于maven的解决方案
弹簧靴的解决方案 - 通过添加覆盖spring boot依赖项 5.1.5.Final
答案 9 :(得分:1)
虽然这可能不是您的问题的原因,但如果在同一端口上运行两个MySQL服务,您将得到相同的错误。您可以通过查看任务管理器的服务选项卡中的服务列表来检查窗口。
答案 10 :(得分:1)
试试这样....
public static Connection getConnection() throws SQLException{
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/test";
String username = "root";
String password = "vicky"; // Change it to your Password
System.setProperty(driver,"");
return DriverManager.getConnection(url,username,password);
}
答案 11 :(得分:0)
在:
中添加端口号(类似于 3306)Connection c = DriverManager.getConnection("jdbc:mysql://localhost:urport","root","root");
答案 12 :(得分:0)
我在运行springboot项目的时候,application.yml的配置是这样的:
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/lof?serverTimezone=GMT
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
请注意密码周围没有引号。我可以在我的 Windows 系统中运行这个项目。
但是当我尝试部署到服务器时,我遇到了问题,我通过将 application.yml 更改为:
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/lof?serverTimezone=GMT
username: root
password: "root"
driver-class-name: com.mysql.cj.jdbc.Driver
答案 13 :(得分:0)
我的application.properties
看起来像这样
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/mydb
spring.datasource.username=root
spring.datasource.password=root
对我唯一有效的方法是先进行Maven清理,然后进行Maven安装。
答案 14 :(得分:0)
我也面临着同样的问题,即使用户具有足够的特权来访问数据库,我的连接字符串也有效,并且用户名和密码也有效。
我通过删除MySQL创建的临时文件夹解决了此问题(请先备份,然后再删除任何文件夹,以防万一它不起作用,您可以再次放置该文件)。
Windows中MySQL的临时文件和连接文件的默认文件夹位置是:
C:\ ProgramData \ MySQL
我已删除(已备份)以下文件夹:
C:\ ProgramData \ MySQL \ MySQL Server \ Data \ sys
注意::在删除任何项目之前,请确保未启动MySQL服务,否则它将不允许删除任何文件
对我有用。
答案 15 :(得分:0)
这个为我解决的问题。
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';
GRANT ALL PRIVILEGES ON *.cfe TO 'root'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
答案 16 :(得分:0)
我正在使用Spring Boot 2.2.6(Windows),并在尝试运行该应用程序时遇到相同的问题: java.sql.SQLException:用户'root'@'localhost'的访问被拒绝(使用密码:是)
什么解决了我的问题:
或者按照@evg解决方案在Linux环境中从命令行授予privilegdes。
答案 17 :(得分:0)
对我来说,该解决方案的工作方式是将url格式更改为: con = DriverManager.getConnection(“ jdbc:mysql:// localhost / w3schools?user = ###&password = ###”)); 确保将适当的jar添加到类路径并使用驱动程序 Class.forName(“ com.mysql.jdbc.Driver”);
答案 18 :(得分:0)
答案 19 :(得分:0)
声明顺序:
如果我们按顺序声明
应用程序将失败
答案 20 :(得分:0)
如果要使用Java从本地计算机连接远程mysql服务器,请执行以下步骤。 错误: “ java.sql.SQLException:用户'xxxxx'@'101.123.163.141'的访问被拒绝(使用密码:是)”
对于远程访问,可能是cpanel或其他人为您的本地IP地址授予了远程访问权限。
在以上错误消息中:“ 101.123.163.141”是我的本地计算机ip。因此,首先我们必须在Cpanel-> RemoteMySQL®中进行远程访问。然后运行您的应用程序进行连接。
Class.forName("com.mysql.jdbc.Driver");
Connection con=DriverManager.getConnection(
"jdbc:mysql://www.xyz.com/abc","def","ghi");
//here abc is database name, def is username and ghi
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("select * from employee");
while(rs.next())
System.out.println(rs.getInt(1)+" "+rs.getString(2)+"
"+rs.getString(3));
con.close();
希望它可以解决您的问题。
谢谢
答案 21 :(得分:0)
这似乎主要发生在MySQL用户名和密码不正确时。检查您的MySQL用户名和密码。
答案 22 :(得分:0)
我必须更改我的SQL设置(在我的主机中,在我的情况下是Dreamhost)以允许用户名从其他主机访问数据库,而不仅仅是Dreamhost,因为我在计算机上运行IDE程序。我现在通过将%添加到Allowable Hosts列表中来实现。它现在有效!
答案 23 :(得分:-1)
如果使用的是MySql工作台,请转到工作台的主页,右键单击数据库,复制JDBC连接字符串,然后将其粘贴到Java程序中。
答案 24 :(得分:-1)
我也有这个问题,已经解决了。
更改:
Sring url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&user=root&password=password";
设置:
Sring url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&user=root&password=password";
是"serverTimezone=UTC"
。
"Unified standard world time"
是"useUnicode=true&characterEncoding=UTF-8"
。
尽管我的数据库没有任何中文单词。但它正在工作。 来自https://www.cnblogs.com/EasonJim/p/6906713.html
的引用答案 25 :(得分:-1)
我遇到了这个错误。问题是我的数据库名称错误。