Java.sql.SQLException: Доступ запрещен для пользователя 'root' @'localhost' (с использованием пароля: YES)
Следующий код:
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)
Как это вызвано и как я могу его решить?
EDIT:
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)
Ответы
Ответ 1
Как вы создаете базу данных с нуля, вы можете использовать:
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword");
PreparedStatement ps = connection.prepareStatement("CREATE DATABASE databasename");
int result = ps.executeUpdate();
Вот идентичный сценарий.
Ответ 2
Это может помочь вам:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '%password%' WITH GRANT OPTION;
Выполните его с помощью командной строки или некоторого инструмента GUI.
Не забудьте заменить %password%
на реальный пароль.
Ответ 3
вы можете использовать этот
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
Вы должны указать db, к которому вы подключаетесь:
jdbc:mysql://localhost:3306/mydb
Ответ 5
У меня была аналогичная проблема, но разница была: я не выполнил свой JavaApp с localhost
, а с удаленного ПК. Итак, я получил что-то вроде java.sql.SQLException: Access denied for user 'root'@'a.remote.ip.adress' (using password: YES)
Чтобы решить эту проблему, вы можете просто войти в phpMyAdmin, перейдите в Users
, нажмите add user
и введите хост, из которого вы хотите выполнить JavaApp (или выберите Any Host
)
Ответ 6
Попробуй вот так....
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);
}
Ответ 7
Я столкнулся с той же проблемой. Добавлен номер сервисного порта mysql (3307), разрешил проблему.
conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/?" + "user=root&password=password");
Ответ 8
Хотя это может и не быть причиной вашей проблемы, вы получите ту же ошибку, если на одном порту работают две службы MySQL. Вы можете проверить окна, просмотрев список служб на вкладке "Сервисы" диспетчера задач.
Ответ 9
У меня была такая же проблема: "java.sql.SQLException: доступ запрещен для пользователя" root "@" localhost "(с использованием пароля: YES)". Проблема была "НЕПРАВИЛЬНЫЙ ПАРОЛЬ". Скопируйте и вставьте запрос как есть в оболочке, чтобы проверить, дает ли он желаемый результат или нет. Небольшие ошибки потребляют больше времени.
Ответ 10
Это исключение также вызвано несоответствием версии mysql db и вашего pom.xml/jar.
Убедитесь, что версия pom.xml/jar выше, чем версия mysql db.
Поскольку более высокие версии совместимы с более низкой версией, но то же самое не верно для обратного.
Решение для проекта java
- Замените Jar подходящей версией.
Решение для maven на основе
- Измените версию зависимостей в pom.xml
Решение для загрузки spring
- переопределить загрузочную зависимость spring, добавив
5.1.5.Final
Ответ 11
Мне пришлось изменить мою настройку SQL (в моем хосте, Dreamhost в моем случае), чтобы позволить пользователю получить доступ к базе данных с других хостов, а не только Dreamhost, так как я запускаю программу из среды IDE на моем компьютере. Я сделал это сейчас, добавив% к списку допустимых хостов. Теперь это работает!
Ответ 12
Я столкнулся с этой ошибкой. Проблема заключалась в том, что у меня было неправильное имя базы данных.