SORU
28 Temmuz 2011, PERŞEMBE


Çözme bir "iletişim bağlantısı hatası" yerli mal ve MySQL ile

Yerel MySQL sunucusuna bağlanmak için çalışıyorum ama bir hata almaya devam ediyorum.

İşte kod.

public class Connect {

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

        try {
            String userName = "myUsername";
            String password = "myPassword";

            String url = "jdbc:mysql://localhost:3306/myDatabaseName";
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            conn = DriverManager.getConnection(url, userName, password);
            System.out.println("Database connection established");
        } catch (Exception e) {
            System.err.println("Cannot connect to database server");
            System.err.println(e.getMessage());
            e.printStackTrace();
        } finally {
            if (conn != null) {
                try {
                    conn.close();
                    System.out.println("Database Connection Terminated");
                } catch (Exception e) {}
            }
        }
    }
}

ve hatalar :

Cannot connect to database server
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.
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:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
        at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
        at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
        at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2333)
        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(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        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(DriverManager.java:582)
        at java.sql.DriverManager.getConnection(DriverManager.java:185)
        at Connect.main(Connect.java:16)
    Caused by: java.net.ConnectException: Connection refused
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
        at java.net.Socket.connect(Socket.java:529)
        at java.net.Socket.connect(Socket.java:478)
        at java.net.Socket.<init>(Socket.java:375)
        at java.net.Socket.<init>(Socket.java:218)
        at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257)
        at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:294)
        ... 15 more

Sınıf, emin benim yapmış oldum.cümlesi ağ seçeneği diye atlamak vardı.

java sürüm 1.2.0_26 (64 bit) mysql 5.5.14 mysql bağlayıcı 5.1.17

Kullanıcı veritabanı erişim vardı emin yaptı.

CEVAP
27 Mayıs 2012, Pazar


Benim iki programı da aynı sorun vardı. Benim hata bu oldu:

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.

Bazı günler bu sorunu çözmek için harcıyorum. Farklı web sitelerinde adları geçen pek çok yaklaşım denedim, ama onlardan olmayan çalıştı. Sonunda Şifremi değiştirdim ve sorunun ne olduğunu öğrendim. Farklı yaklaşımlar hakkında size anlatmaya çalışacağımonları buraya topla.

Bu hata için çözüm bulmak için internette arıyordum olsa da, çözdümen az bir kişi için çalışan pek çok çözüm var, ama diğerleri onlar için çalışmıyor ki!neden bu hata için pek çok yaklaşım vardır? Gibi görünüyorbu hata oluşabilirgenelliklesunucuya bağlanırken bir sorun olduğunda. Belki de sorun yanlış sorgu dizesi veya veritabanına çok fazla bağlantı yüzünden.

Tüm çözümler tek tek denemenizi öneririm ve sakın PES etme!

İşte sorun bu çözüm ile çözüldü kim her biri için internet üzerinden ve en az bir kişi var bulduğum çözümler.

noktası: MySQL ayarlarını değiştirmek için, aşağıdaki dosyaları için başvurabilirsiniz: çözümler İçin

  • Linux: /etc/mysql/my.CPT

  • Windows: D:\Program Files\mysql\bin\my.ını

İşte çözüm:

  • "bind-address" özniteliği . değişen

Yorumsuz "bind-address" veya aşağıdaki IPs birini değiştirmek için nitelik:

bind-address="127.0.0.1"

ya

bind-address="0.0.0.0"

  • "geç " ağ" . yorum

Eğer varsa "geç " ağ" MySQL config dosyasında satır ekleyerek Açıklama "#" Bu satırın başındaki işareti.

  • "" ve "" . interactive_timeout waıt_tımeout değiştirin

MySQL config dosyasına bu satırları ekleyin:

wait_timeout =numarası

= interactive_timeoutnumarası

= connect_timeoutnumarası

  • İşletim Sistemi proxy ayarlarını kontrol edin

Emin olun güvenlik duvarı ya da Anti virüs yumuşak mallar MySQL hizmeti engellemeyin.

  • bağlantı dizesini değiştirin

Sorgu dize kontrol edin. bağlantı dizesi böyle bir şey olmalıdır:

dbName = "my_database";
dbUserName = "root";
dbPassword = "";
String connectionString = "jdbc:mysql://localhost/"   dbName   "?user="   dbUserName   "&password="   dbPassword   "&useUnicode=true&characterEncoding=UTF-8";

Senin dize boşluk olmadığından emin olun. Tüm bağlantı dizesi herhangi bir boşluk karakteri olmadan devam edilmelidir.

"" Bağlantı noktası, 127.0.0.1.gibi localhost yerine deneyin Bağlantı dizesi için port numarası eklemek için deneyin:

String connectionString = "jdbc:mysql://localhost:3306/my_database?user=root&password=Pass&useUnicode=true&characterEncoding=UTF-8";

MySQL için genellikle varsayılan portu 3306.

Kullanıcı adı değiştirmek ve kullanıcı adı ve parola unutmayın ve MySQL sunucunuzun şifre yok.

  • senin İLGİLENİYORUZ sürücü kitaplığı dosya güncelleme
  • farklı olduğunu GÖRDÜM ve JREs (GÖRDÜM 6 ve 7 gibi) test
  • max_allowed_packet değişiklik yok

"max_allowed_packet en büyük paket boyutunu, paket. maksimum sayısını belirten" MySQL yapılandırma dosyası içinde bir değişken. Bu hatayı çözmek için yardımcı olur.

  • tomcat güvenliği değiştirin

TOMCAT6_SECURİTY=TOMCAT6_SECURİTY=hayır için Evet olarak değiştirin

  • validationQuery özelliği kullanın

validationQuery="() seçmek artık" her sorgu yanıt olduğundan emin olmak için kullanın

  • AutoReconnect

Bağlantı dizesi için: bu kodu ekleyin

&autoReconnect=true&failOverReadOnly=false&maxReconnects=10

Bu çözümlerin olmayan benim için çalıştı, ancak, onları denemenizi öneririm. Aşağıdaki adımlar ile sorunu çözen insanlar var çünkü.

Ama benim sorunum ne çözüldü?

Benim sorunum veritabanı Seçer kaldım çok oldu. Her zaman bir bağlantı oluşturmak ve daha sonra kapatıyordum. Bağlantı her zaman kapatıyordum rağmen, ancak sistem birçok bağlantıları ile karşı karşıya ve bana hata verdi.Ne yaptım, tüm sınıf için (veya özel) bir ortak değişken olarak benim bağlantı değişkeni tanımlı ve yapıcı olarak başlatılmış oldu.Her zaman sonra sadece bu bağlantı kullanılır. Benim sorunum çözüldü ve aynı zamanda önemli ölçüde benim hızı arttı.

Sonuç

Bu sorunu çözmek için basit ve benzersiz bir yol yoktur. Sen kendi durumunu düşün ve çözümleri yukarıda seçmenizi öneririm. Program başlangıcında bu hatayı alıp veritabanına bağlanmak için mümkün değilse, bağlantı dizesi içinde sorun olabilir. Ama Eğer bu hatadan sonra birçok başarılı etkileşim için veritabanı sorunu olabilir ile bağlantı sayısı ve düşün değiştirme "waıt_tımeout" ve diğer MySQL ayarlarını veya yeniden yazma kodu nasıl azaltmak bağlantı sayısı.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • expertvillage

    expertvillag

    5 NİSAN 2006
  • Jeb Corliss

    Jeb Corliss

    17 Kasım 2006
  • TechRax

    TechRax

    21 EYLÜL 2009