2010-01-20 9 views
5

Mam problemy próbuje uzyskać połączenie z bazą danych przy użyciu kodu poniżej:Nie można wykonać połączenia JDBC do MySQL (przy użyciu Java, IntelliJ i 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(); 
    } 

komunikat o błędzie, który jest wyprowadzany jest:

/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

Dosłownie nie mam pojęcia, jak rozwiązać ten komunikat o błędzie. Baza danych istnieje. Nazwa użytkownika i hasło istnieją. W tej chwili nie dodałem żadnych tabel do bazy danych, ale nie sądzę, że to może być problem, ponieważ w końcu nawiązuję połączenie tylko ...

Mogę dostarczyć dodatkowych informacji w razie potrzeby. Czuję, że wiele próbowałem. Czy ktokolwiek zna jakieś sposoby uzyskania dalszych informacji na temat tego, w jaki sposób i dlaczego zawodzi?

Dzięki za pomoc! :)

+0

Czy można połączyć się z nim bezpośrednio (przy użyciu klienta mysql)? Jedynym użytecznym bitem tracebacku jest '08S01', a dokumentacja mysql wspomina o nim coś (http://dev.mysql.com/doc/refman/5.0/en/connector-j-usagenotes-troubleshooting.html#qandaitem- 20-3-5-3-1-3). – shylent

+0

Czy próbowałeś użyć adresu URL "jdbc: mysql: // localhost/jsp_test"? Głównie po prostu przypadkowe debugowanie. –

+0

Mogę połączyć się bezpośrednio za pomocą klienta mysql i mojej nazwy użytkownika "jsp_test". Nadal nie mogę się połączyć, jeśli zmienię 127.0.0.1 na localhost. Dzięki za link, przyjrzę się. Zastanawiam się, czy ktoś inny może spróbować zrobić to samo z własną maszyną i mysql-connector-java-5.1.10-bin.jar – olive

Odpowiedz

6

Ta nazwa powinna znajdować się na lokalnym komputerze. Czy możesz spróbować uruchomić to polecenie, aby upewnić się, że gniazdo jest otwarte dla połączeń?

telnet 127.0.0.1 3306

i upewnić się, że łączy? Być może nie skonfigurowałeś instancji mysql do nasłuchu połączeń z tego komputera lub pod tym adresem interfejsu. Jeżeli połączenie nie powiedzie się, trzeba zmodyfikować config mysql, na przykład:

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

+0

[bedtimes @ seb ~] $ telnet 127.0.0.1 3306 Próba 127.0.0.1. .. telnet: Nie można połączyć się ze zdalnym hostem: odmowa połączenia ... Wygląda na to, że możesz mieć rację!Pójdę i wypróbuje ten przewodnik, a następnie skontaktuję się z Tobą, jeśli rozwiąże to problem. C: – olive

+1

Teraz otrzymuję: [bedtimes @ seb /] $ telnet localhost 3306 Próbuję 127.0.0.1 ... Połączony z localhost. Escape to "^]". Połączenie zamknięte przez hosta zagranicznego. ... Czy ktoś wie, co to oznacza? – olive

+0

Ostateczna poprawka została zmieniona przez hosts.allow, jak określono na tej stronie: http://bbs.archlinux.org/viewtopic.php?pid=346836#p346836 Razem PITA. Dzięki! C: – olive

1

miałem takie same objawy, ale dla mnie rozwiązaniem było zmienić bind-adres 0.0.0.0 w/etc/mysql/my.cnf

(Tylko opublikowania tego dla innych szukających odpowiedzi na to pytanie)

+0

Całkowicie usunę linię adresu powiązania i naprawiłem dla mnie ten sam problem. – jgritty

1

można spróbować to zamiast:

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

yo u można spróbować jednego z następujących

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

lub

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

lub

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

jako ciąg połączenia.

Powiązane problemy