2012-08-12 9 views
29

Il seguente codice:java.sql.SQLException: Accesso negato per l'utente 'root' @ 'localhost' (usando la password: YES)

Class.forName("com.mysql.jdbc.Driver"); 
Connection m_connection = DriverManager.getConnection("jdbc:mysql://localhost","root","root"); 

genera questa eccezione il 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) 

Come è causato e come posso risolverlo?

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(); 
     } 
} 

Produce:

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

sei in grado di connettersi utilizzando client mysql GUI come SqlYog o PhpMyAdmin? – Tomer

+1

@ ftom2: Sì, posso accedere correttamente a 'phpmyadmin'. – ron

+1

Sei sicuro che il ** nome utente ** e la ** password ** forniti siano corretti? Per me non esiste un utente come ** root ** :(Non è sicuro, ma non devi fornire il ** Nome database ** come 'Connection con = DriverManager.getConnection (" jdbc: mysql: // localhost; database = mywebsitedb; user = sa; password = thatstrue; ");' –

risposta

8

Come si sta creando un database da zero, è possibile utilizzare:

Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/?user=root&password=rootpassword"); 
PreparedStatement ps = connection.prepareStatement("CREATE DATABASE databasename"); 
int result = ps.executeUpdate(); 

Ecco un identical scenario.

+0

Se non ho alcun database? e voglio creare il database usando il codice java, e NON manualmente in 'phpmyadmin', quindi' databaseName' non è rilevante? – ron

+0

Ok, mi scuso, ho aggiornato con la nuova sintassi – Reimeus

+0

Si prega di vedere post modificato. – ron

1

Prova in questo modo ....

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); 
} 
+3

Perché esattamente risolverebbe il problema concreto? Non stai spiegando la causa in alcun modo. – BalusC

2

È necessario specificare il db ci si connette a:

jdbc:mysql://localhost:3306/mydb 
38

Questo può aiutare a:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '%password%' WITH GRANT OPTION; 

eseguirlo con la linea di comando o di qualche strumento GUI.

Non dimenticare di sostituire %password% con la vera password.

+4

Probabilmente dovresti cambiare "IDENTIFICATO DA 'root'" con "IDENTIFICATO DA 'password'" per evitare confusione. – Pranjal

+0

@Pranjal hai ragione. Grazie. Ho modificato la risposta. – evg

+1

@evg Ho eseguito correttamente questa query ma non mi libero ancora da questo errore –

1

Ho riscontrato lo stesso problema. Aggiunto il numero di porta del servizio mysql (3307), risolto il problema.

conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/?" + "user=root&password=password"); 
3

Ho avuto un problema simile, ma la differemce era: non ho in pratica le mie JavaApp da localhost, ma da un PC remoto. Così ho preso qualcosa come java.sql.SQLException: Access denied for user 'root'@'a.remote.ip.adress' (using password: YES) Per risolvere questo, si può semplicemente accedere a phpMyAdmin, andare a Users, cliccare add user e immettere l'host da cui si desidera eseguire il vostro JavaApp (o scegliere Any Host)

3

è possibile utilizzare questo

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); 

devi fornire la password di root corretta.

1

Anche se questo potrebbe non essere la causa del problema, si otterrà lo stesso errore se ci sono due servizi MySQL in esecuzione sulla stessa porta. È possibile controllare su Windows guardando l'elenco dei servizi nella scheda servizi di Task Manager.

+0

Questo è un commento, non una risposta. –

0

Ho avuto lo stesso problema "java.sql.SQLException: accesso negato per utente 'root' @ 'localhost' (utilizzando password: YES)". Il problema era "WRONG PASSWORD". Copia e incolla la query così com'è nella shell per verificare se fornisce l'output desiderato o meno. Piccoli errori consumano più tempo.

1

Questa eccezione si verifica anche a causa della mancata corrispondenza della versione di mysql db e del tuo pom.xml/jar.

Assicurati che la tua versione pom.xml/jar sia superiore alla tua versione di mysql db. Perché versioni superiori sono compatibili con versioni inferiori, ma lo stesso non è vero per l'inverso.

di soluzione per il progetto Java

  • Sostituire il vaso con versione adatta.

Soluzione per Maven basato

  • Cambiare la dipendenza versione in pom.xml

soluzione per l'avvio di primavera - superare le dipendenze di avvio di primavera con l'aggiunta di 5.1.5.Final

0

Ho dovuto modificare la mia configurazione SQL (nel mio host, Dreamhost nel mio caso) a tutti o il nome utente per accedere al database da altri host, non solo da DreamHost poiché eseguo un programma dall'IDE sul mio computer. L'ho fatto per ora aggiungendo% all'elenco degli Host consentiti. Ora funziona!

+0

Dovrei aggiungere che questo è simile all'approccio #munchkins ma dal pannello di controllo SQL. –

0

Ho riscontrato questo errore. Il problema era che avevo il nome del database sbagliato.

+0

Questo non fornisce una risposta alla domanda. Una volta che hai [reputazione] sufficiente (https://stackoverflow.com/help/whats-reputation) sarai in grado di [commentare qualsiasi post] (https://stackoverflow.com/help/privileges/comment); invece [fornisci risposte che non richiedono chiarimenti da parte del richiedente] (https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can- i-do-, invece). - [Dalla recensione] (/ recensione/post di bassa qualità/18284339) – Mamun

Problemi correlati