2010-01-20 15 views
5

Ho dei problemi cercando di ottenere una connessione al database utilizzando il codice qui sotto:Impossibile stabilire una connessione JDBC per MySQL (utilizzando Java, IntelliJ, e Linux)

try { 
     Class.forName("com.mysql.jdbc.Driver"); 
     Properties p = new Properties(); 
     p.put("user", user_name); 
     p.put("password", password); 
     connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1/jsp_test", p); 
    } catch (SQLException ex) { 
     // handle any errors 
     ex.printStackTrace(); 
     System.out.println("SQLException: " + ex.getMessage()); 
     System.out.println("SQLState: " + ex.getSQLState()); 
     System.out.println("VendorError: " + ex.getErrorCode()); 
     return false; 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } 

Il messaggio di errore che viene emesso è:

/usr/lib/jvm/java-6-openjdk/bin/java -Didea.launcher.port=7532 -Didea.launcher.bin.path=/usr/bin/idea/bin -Dfile.encoding=UTF-8 -classpath /usr/lib/jvm/java-6-openjdk/jre/lib/jce.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/about.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/resources.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/management-agent.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/jsse.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/charsets.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/rt.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/ext/localedata.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/ext/sunjce_provider.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/ext/sunpkcs11.jar:/usr/lib/jvm/java-6-openjdk/jre/lib/ext/dnsns.jar:/home/bedtimes/Java Projects/db_demo/out/production/db_demo:/opt/java/jre/lib/ext/mysql-connector-java-5.1.10-bin.jar:/usr/bin/idea/lib/idea_rt.jar com.intellij.rt.execution.application.AppMain Main com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:532) at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2214) at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:781) at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:46) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:532) at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:352) at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:284) at java.sql.DriverManager.getConnection(DriverManager.java:620) at java.sql.DriverManager.getConnection(DriverManager.java:169) at database.Database.connect(Database.java:80) at Main.main(Main.java:13) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:616) at com.intellij.rt.execution.application.AppMain.main(AppMain.java:110) Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:532) at com.mysql.jdbc.Util.handleNewInstance(Util.java:406) at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074) at com.mysql.jdbc.MysqlIO.(MysqlIO.java:343) at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2137) ... 18 more Caused by: java.net.ConnectException: Connection refused at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:310) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:176) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:163) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384) at java.net.Socket.connect(Socket.java:542) at java.net.Socket.connect(Socket.java:492) at java.net.Socket.(Socket.java:389) at java.net.Socket.(Socket.java:232) at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:253) at com.mysql.jdbc.MysqlIO.(MysqlIO.java:292) ... 19 more SQLException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server. SQLState: 08S01 VendorError: 0

Process finished with exit code 0

Non ho, letteralmente, idea di come risolvere questo messaggio di errore. Il database esiste. Il nome utente e la password esistono. Al momento non ho aggiunto nessuna tabella al database ma non penso che possa essere il problema, dal momento che sto solo facendo una connessione dopotutto ...

Posso fornire ulteriori informazioni se necessario. Mi sento come se avessi provato molto. Qualcuno conosce qualche modo per ottenere ulteriori informazioni su come e perché sta fallendo?

Grazie per il vostro aiuto! :)

+0

È possibile connettersi direttamente (tramite client mysql)? L'unico bit utile del traceback è '08S01' e la documentazione di mysql menziona qualcosa a riguardo (http://dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-troubleshooting.html#qandaitem- 20-3-5-3-1-3). – shylent

+0

Hai provato a utilizzare l'url "jdbc: mysql: // localhost/jsp_test"? Principalmente solo un'ipotesi di debug casuale. –

+0

Posso connettermi direttamente usando il client mysql e il mio username 'jsp_test'. Non riesco ancora a connettermi se cambio 127.0.0.1 in localhost. Grazie per il collegamento, darò un'occhiata. Mi chiedo se qualcun altro può provare a fare la stessa cosa con la propria macchina e mysql-connector-java-5.1.10-bin.jar – olive

risposta

6

Dalla stringa di connessione, questo database deve trovarsi sul computer locale. Puoi provare a eseguire questo comando per assicurarti che il socket sia aperto per le connessioni?

telnet 127.0.0.1 3306

e assicurarsi che si connette? Potresti non aver configurato la tua istanza mysql per ascoltare le connessioni da questa macchina o da questo indirizzo di interfaccia. Se la connessione non riesce, è necessario modificare la configurazione di MySQL, per esempio:

http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html

+0

[bedtime @ seb ~] $ telnet 127.0.0.1 3306 Provare 127.0.0.1. .. telnet: impossibile connettersi all'host remoto: connessione rifiutata ... Sembra che tu abbia ragione!Vado a provare quella guida e poi torno da te se risolve il problema. C: – olive

+1

Ora sto ricevendo: [bedtime @ seb /] $ telnet localhost 3306 Try 127.0.0.1 ... Connesso a localhost. Il carattere di fuga è '^]'. Connessione chiusa da host esterno. ... Qualcuno sa cosa significa? – olive

+0

La correzione finale era alterando hosts.allow come specificato in questa pagina: http://bbs.archlinux.org/viewtopic.php?pid=346836#p346836 PITA totale. Grazie! C: – olive

1

ho avuto gli stessi sintomi, ma per me la soluzione era quella di cambiare il bind-address a 0.0.0.0 in/etc/mysql/my.cnf

(Proprio questo distacco per gli altri che cercano una risposta a questa domanda)

+0

Rimuovere completamente la riga dell'indirizzo di binding e ha risolto lo stesso problema per me. – jgritty

1

Si può provare questo invece:

connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/jsp_test","user_name","password"); 
1

yo u può provare una delle seguenti

"jdbc:mysql://localhost:3306/jsp_test","username","password" 

o

"jdbc:mysql://'your machines ip (without quote)':3306/jsp_test","username","password" 

o

"jdbc:mysql://127.0.0.1:3306/jsp_test","username","password" 

come una stringa di connessione.

Problemi correlati