Le code suivant:
Class.forName("com.mysql.jdbc.Driver");
Connection m_connection = DriverManager.getConnection("jdbc:mysql://localhost","root","root");
Lance cette exception sur 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)
Comment cela est-il causé et comment puis-je le résoudre?
MODIFIER:
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();
}
}
Produit:
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)
Comme vous créez une base de données à partir de zéro, vous pouvez utiliser:
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword");
PreparedStatement ps = connection.prepareStatement("CREATE DATABASE databasename");
int result = ps.executeUpdate();
Voici un scénario identique .
Cela peut vous aider:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '%password%' WITH GRANT OPTION;
Exécutez-le avec la ligne de commande ou un outil graphique.
N'oubliez pas de remplacer %password%
par un mot de passe réel.
J'avais un problème similaire, mais la différence était la suivante: je n’ai pas exécuté ma JavaApp à partir de localhost
, mais à partir d’un PC distant. Donc, j'ai quelque chose comme Java.sql.SQLException: Access denied for user 'root'@'a.remote.ip.adress' (using password: YES)
Pour résoudre ceci, vous pouvez simplement vous connecter à phpMyAdmin, allez à Users
, cliquez sur add user
et entrez l'hôte à partir duquel vous voulez exécuter votre JavaApp (ou choisissez Any Host
)
tu peux utiliser ça
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);
vous devez donner le bon mot de passe root.
Ceci est spécifique à Ubuntu 18.04 LTS et MySQL 5.x Suivait ce link Suivez tout à partir de maintenant:
Sudo mysql_secure_installation
Sudo mysql
Une fois connecté à MySQL, exécutez les commandes suivantes à partir de l'invite MySQL:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;
Maintenant, vérifiez que la table a le mot de passe pour la racine
SELECT user,authentication_string,plugin,Host FROM mysql.user;
Cela a résolu mon problème et maintenant je peux me connecter.
Vous devez spécifier la base de données à laquelle vous vous connectez:
jdbc:mysql://localhost:3306/mydb
J'ai eu le même problème "Java.sql.SQLException: Accès refusé pour l'utilisateur 'root' @ 'localhost' (avec le mot de passe: YES)". Le problème était "MOT DE PASSE ERRONÉ". Copiez et collez la requête telle quelle dans le shell pour vérifier si elle fournit ou non le résultat souhaité. Les petites erreurs consomment plus de temps.
Cette exception est également due à une incompatibilité de version entre mysql db et votre pom.xml/jar.
Assurez-vous que votre version de pom.xml/jar est supérieure à votre version de mysql db . Les versions supérieures étant compatibles avec les versions inférieures, il n'en va pas de même pour l'inverse.
Solution pour projet Java
Solution pour maven
Solution pour démarrage à ressort - Remplacez la dépendance de démarrage de printemps en ajoutant 5.1.5.Final
Bien que cela ne soit peut-être pas la cause de votre problème, vous obtiendrez la même erreur si deux services MySQL s'exécutent sur le même port. Vous pouvez vérifier les fenêtres en consultant la liste des services dans l'onglet Services du Gestionnaire de tâches.
Je frappais le même problème. Ajout du numéro de port du service mysql (3307), résolution du problème.
conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/?" + "user=root&password=password");
Essayez comme ça ....
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);
}
Cela semble se produire principalement lorsque le nom d'utilisateur et le mot de passe MySQL sont incorrects. Vérifiez votre nom d'utilisateur et votre mot de passe MySQL.
Si vous connectez un serveur mysql distant à partir de votre machine locale à l'aide de Java, reportez-vous aux étapes ci-dessous. : OUI) "
cpanel pour l'accès à distance peut être ou d'autres accordent l'accès à distance pour votre adresse IP locale.
Dans le message d'erreur ci-dessus: "101.123.163.141" est l'adresse IP de mon ordinateur local. Nous devons donc d'abord donner un accès distant dans Cpanel-> Remote MySQL®. Ensuite, lancez votre application pour vous connecter.
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();
J'espère que cela résoudra votre problème.
Merci
J'ai dû modifier ma configuration SQL (dans mon hôte, Dreamhost dans mon cas) pour permettre au nom d'utilisateur d'accéder à la base de données depuis d'autres hôtes, pas seulement Dreamhost, car j'exécute un programme à partir de IDE sur mon ordinateur. Je l'ai fait pour l'instant en ajoutant% à la liste des hôtes autorisés. Cela fonctionne maintenant!