2015-10-21 3 views
0

Pour se connecter à la base de données mysql en utilisant java sur mac Yosemite et à l'url complète du fichier jar jdbcdriver dans PATH CLASS. La console netbeans indique que "java.sql.SQLException: Accès refusé pour l'utilisateur 'root' @ 'localhost' (en utilisant le mot de passe: YES)." J'ai essayé de nombreuses façons comme des forums, mais ça ne marche toujours pas.La connexion a échoué! Vérifier la console de sortie

Voici mes codes

//STEP 1. Import required packages 
import java.sql.*; 

public class JDBCExample { 
    // JDBC driver name and database URL 
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
    static final String DB_URL = "jdbc:mysql://localhost:3307/library"; 

    // Database credentials 
    static final String USER = "root"; 
    static final String PASS = "default$"; 

    public static void main(String[] args) { 
    Connection conn = null; 
    Statement stmt = null; 
    ResultSet rs = null; 
    try{ 
     //STEP 2: Register JDBC driver (automatically done since JDBC 4.0) 
     Class.forName("com.mysql.jdbc.Driver"); 

     //STEP 3: Open a connection 
     System.out.println("Connecting to database..."); 
     conn = DriverManager.getConnection(DB_URL, USER, PASS); 

     //STEP 4: Execute a query 
     System.out.println("Creating database..."); 
     stmt = conn.createStatement(); 
     rs = stmt.executeQuery("select uid uname from User"); 

     //STEP 5: Process the results 
     while(rs.next()){ 
      System.out.println("User ID="+rs.getInt("uid")+", Name="+rs.getString("uname")); 
     } 

    }catch(SQLException se){ 
     //Handle errors for JDBC 
     se.printStackTrace(); 
    }catch(Exception e){ 
     //Handle errors for Class.forName 
     e.printStackTrace(); 
    }finally{ 
     //finally block used to close resources 
     try{ 
     if(stmt!=null) 
      stmt.close(); 
     }catch(SQLException se2){ 
     }// nothing we can do 
     try{ 
     if(conn!=null) 
      conn.close(); 
     }catch(SQLException se){ 
     se.printStackTrace(); 
     }//end finally try 
    }//end try 
    System.out.println("Goodbye!"); 
}//end main 
}//end JDBCExample 

Voici les résultats:

Connection Failed! Check output console 
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:959) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3870) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3806) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:871) 
    at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1686) 
    at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1207) 
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2254) 
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2285) 
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2084) 
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:795) 
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:408) 
    at com.mysql.jdbc.Util.handleNewInstance(Util.java:404) 
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:400) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:327) 
    at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:422) 
    at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:134) 
    at com.mysql.jdbc.jdbc2.optional.MysqlDataSource.getConnection(MysqlDataSource.java:105) 
    at cs157a_test.DataSourceTester.main(DataSourceTester.java:54) 
+1

Etes-vous sûr, votre port db url (par défaut c'est 3306), nom d'utilisateur et mot de passe est correct? Juste sûr de lui –

+0

AFAIK il sera une autre erreur en cas de mauvais port comme "Connexion refusée" @ B-Y pouvez-vous connecter le client de ligne de commande mysql co avec les informations d'identification spécifiées dans le code? Par exemple. dans le terminal 'mysql -u root -p'? – Klever

Répondre

0

L'exception que vous avez vous dit que vous avez connecté avec succès au serveur mais, l'utilisateur root n'est pas autorisé/accordées pour se connecter à partir de localhost.

Vous devez revoir votre table de privilèges utilisateur mysql et vous assurer que vous avez une ligne permettant à root de se connecter à partir de localhost avec un mot de passe correct.

SQL suivante montre ceci:

SELECT host, user FROM mysql.user; 

S'il y a une ligne pour root et localhost ou root et % alors vous devez réinitialiser votre mot de passe avec ce SQL:

set password for 'root'@'localhost' = password('your_password'); 

Si il n'y a pas de ligne, vous devez le créer et ensuite définir les privilèges sur les bases de données que vous voulez accéder avec cet utilisateur.

Vous pouvez y parvenir avec l'instruction SQL suivante:

CREATE USER 'root'@'localhost' IDENTIFIED BY 'your_password'; 
GRANT ALL ON YOU_DATABASES.* TO 'root'@'localhost'; 

Enfin, vous avez à vider les privilèges ou redémarrer MySQL. Réessayez et assurez-vous que vous serez connecté.

+0

J'ai montré ce que j'ai fait, mais ça ne marche pas. Qu'est-ce que j'ai mal? –

+0

@ B-Y J'espère que votre chaîne de mot de passe dans le code ressemble à ceci: 'static final String PASS =" 829891 ";' – Klever

+0

Avez-vous redémarré mysql après avoir changé le mot de passe? – malaguna

0

Voulez-vous vérifier cela. Ça marche pour moi.

import java.*; 
    import java.sql.*; 
    import java.util.*; 
    //STEP 1. Import required packages 
    import java.sql.*; 

    public class Memory { 
    // JDBC driver name and database URL 
    static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; 
    static final String DB_URL = "jdbc:mysql://localhost:3306/library"; 

    // Database credentials 
    static final String USER = "root"; 
    static final String PASS = "root"; 

    public static void main(String[] args) { 
    Connection conn = null; 
    Statement stmt = null; 
    ResultSet rs = null; 

    try{ 
     //STEP 2: Register JDBC driver (automatically done since JDBC 4.0) 
     Class.forName("com.mysql.jdbc.Driver"); 

     //STEP 3: Open a connection 
     System.out.println("Connecting to database..."); 
     conn = DriverManager.getConnection(DB_URL, USER, PASS); 

     //STEP 4: Execute a query 
     System.out.println("Creating database..."); 
     stmt = conn.createStatement(); 
     rs = stmt.executeQuery("select uid, uname from uisend"); 

     //STEP 5: Process the results 
     while(rs.next()){ 
      System.out.println("User ID="+rs.getInt("uid")+", Name="+rs.getString("uname")); 
     } 

    }catch(SQLException se){ 
     //Handle errors for JDBC 
     se.printStackTrace(); 
    }catch(Exception e){ 
     //Handle errors for Class.forName 
     e.printStackTrace(); 
    }finally{ 
     //finally block used to close resources 
     try{ 
      if(stmt!=null) 
       stmt.close(); 
     }catch(SQLException se2){ 
     }// nothing we can do 
     try{ 
      if(conn!=null) 
       conn.close(); 
     }catch(SQLException se){ 
      se.printStackTrace(); 
     }//end finally try 
    }//end try 
    System.out.println("Goodbye!"); 
    }//end main 
    }//end JDBCExample 
+0

J'ai changé votre code sur 2 des lignes.static final Chaîne DB_URL = "jdbc: mysql: // localhost: 3306/bibliothèque"; static final String PASS = "root"; Si ma réponse est upvoted alors les autres sauront que cette réponse fonctionne et peut en tirer profit comme vous. – Don

0

Je ne sais pas pourquoi cela fonctionne comme mes codes et n'ont pas besoin de changer.

User ID=1001, Name=17 
User ID=1002, Name=Kim 
User ID=1003, Name=Jane Koffman 
User ID=1004, Name=Katherine H. Lang 
User ID=1005, Name=Smith 
User ID=1006, Name=Juanita J. Palmer 
User ID=1007, Name=Otherone with no age 
User ID=1008, Name=Ethel W. Williams 
User ID=1009, Name=Someone with no age 
User ID=1010, Name=Candis C. Whitehead 
User ID=1011, Name=Kim 
User ID=1012, Name=Margaret F. Delmonte 
User ID=1013, Name=Susan M. McKeel 
User ID=1014, Name=Kim 
User ID=1015, Name=Shirley A. Dehaven 
User ID=1016, Name=Smith 
User ID=1017, Name=Chad G. Turner 
User ID=1018, Name=Suzanne J. Champine 
User ID=1019, Name=Harry King 
Goodbye!