web-dev-qa-db-fra.com

java.sql.SQLException: accès refusé pour l'utilisateur 'root @ localhost' @ 'localhost' (à l'aide du mot de passe: YES)

Je connecte Java en utilisant Eclipse avec MySQL db

CODE

import Java.sql.*;
import Java.io.*;

public class DbDemo {

    public static void main(String args[]) throws ClassNotFoundException, SQLException {

        String s;       
        String uname="root@localhost";
        String url="jdbc:mysql://localhost:3306/student";

        String password="Hsun123";

        int i;

        try {

            Class.forName("com.mysql.jdbc.Driver").newInstance();

            Connection con=DriverManager.getConnection(url,uname,password);

            Statement st=con.createStatement();

            ResultSet rs=st.executeQuery("select * from student_detail");

            if(rs.next()) {

                i=rs.getInt(1);

                s=rs.getString(2);

                System.out.println(i+"/t"+s);
            }           

            rs.close();

            st.close();

            con.close();

        } catch(Exception e) {
            e.printStackTrace();
        }
    }
}

ERREUR

Java.sql.SQLException: Access denied for user 'root@localhost'@'localhost' (using password: YES)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.Java:1073)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:3597)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:3529)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.Java:935)
at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.Java:4101)
at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.Java:1300)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.Java:2337)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.Java:2370)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.Java:2154)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.Java:792)
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:381)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.Java:305)
at Java.sql.DriverManager.getConnection(Unknown Source)
at Java.sql.DriverManager.getConnection(Unknown Source)
at database.DbDemo.main(DbDemo.Java:13)

Que dois-je faire pour résoudre mon problème?

5
rajeev mishra

À la place d'utiliser :

 String uname="root@localhost";

Utilisation :

String url="jdbc:mysql://localhost:3306/student";
String userName="root"
String password="Hsun123"
...
try{

        Class.forName("com.mysql.jdbc.Driver").newInstance();

        Connection con=DriverManager.getConnection(url,username,password);
...

Cela devrait fonctionner (à condition de définir un mot de passe valide)

2
Amitesh Kumar

Si vous connectez un serveur mysql distant à partir de votre machine locale en utilisant Java, suivez les étapes ci-dessous. 

Erreur: Java.sql.SQLException: Accès refusé pour l'utilisateur 'xxxxx'@'101.123.163.141' (en utilisant le mot de passe: YES)

cPanel ou d’autres autorisent 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 l'ordinateur local. Donc, nous devons d'abord donner un accès à distance 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

1
S Debasish Nayak

Eh bien, même problème ici. J'utilise phpmyadmin.

Je devais aller à phpmyadmin->users->root->Edit Privileges.

Ensuite, sur le champ "Database-specific privileges", je devais fournir des privilèges pour ma base de données.

Sur le champ "Change password", j'ai retapé mon mot de passe (je ne sais pas pourquoi je devais le faire, peut-être un bogue possible puisque j'en avais déjà un).

Sur le champ "Login Information->Host" j'ai mis la valeur N'importe quel hôte.

Problème résolu.

1
George Tsamis

Assurez-vous de disposer d’un compte utilisateur privilégié (droits nécéssaires) avec le mot de passe correct dans votre base de données. ou tout simplement pas de mot de passe du tout

0
henry.w

Pour ceux qui souffrent de ce problème 

Java.sql.SQLException: accès refusé pour l'utilisateur 'root' @ 'localhost'

(en utilisant le mot de passe: OUI)

La solution pour cela est:

Quel que soit le mot de passe que vous fournissez sur cette ligne dans votre code 

Connection con=DriverManager.getConnection( 
            "jdbc:mysql://localhost:3306/Pravin","root","password"); 

Pas besoin de fournir ce mot de passe, insérez simplement ""

Le code complet est:

import Java.sql.*;  
class TestDB{  
    public static void main(String args[]){  
    try{  
        Class.forName("com.mysql.jdbc.Driver");  
        Connection con=DriverManager.getConnection(         "jdbc:mysql://localhost:3306/Pravin","root","");  
        //here sonoo is database name, root is username and password  
        Statement stmt=con.createStatement();  
        ResultSet rs=stmt.executeQuery("select * from student");  
        while(rs.next())  
            System.out.println(rs.getInt(1)+"  "+rs.getString(2)+" "+rs.getString(3));  
        con.close();  
    }catch(Exception e){
        System.out.println(e);  
    }  
}  
0
Pravin Garodi

essaye ça...

String password="Hsun123"; 

au lieu de 

String password=""; 
0
kazi