2012-10-24 15 views
5

Bazı kayıtları Mysql'den sorgulamak için java'yı kullandım. Ancak, bir kereliğine ait bazı sorgularda, sorgulamayı başarısız hale getiren bir sorunla karşılaştım, ancak diğerlerinde, sorguyu başarılı bir şekilde sorguladı. Bazı yöntem denediCommunicationsException: İletişim bağlantı hatası

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure 

The last packet successfully received from the server was 90 milliseconds ago. The last packet sent successfully to the server was 1,674 milliseconds ago. 
    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.reuseAndReadPacket(MysqlIO.java:3090) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2979) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3520) 
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:935) 
    at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1433) 
    at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2924) 
    at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:477) 
    at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:2619) 
    at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1788) 
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2209) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2619) 
    at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2569) 
    at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1521) 
    ...... 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) 
Caused by: java.io.IOException: Packets received out of order 
    at com.mysql.jdbc.MysqlIO.readRemainingMultiPackets(MysqlIO.java:3152) 
    at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3077) 
    ... 23 more 

, gibi gibi::

  • benim bağlantı url

?autoReconnect=true&failOverReadOnly=false&maxReconnects=10 eklemek /etc/my.conf

  • yılında max_allowed_packet = 128 * 1024 * 1024 set ama hiçbir şey olmuyor hata mesajı yanındadır .

    Benim ortamlar geçerli:

    • MySQL: 5.5.3-m3-log Kaynak dağılımını
    • Java: 1.6.0_16
    • JDK: HotSpot (TM) 64-bit sunucu VM (14.2 build -b01, karışık mod)
    • JDBC: mysql-connector-java-5.1.18 Eğer bayat bağlantı ile işlemeye çalışırken
  • +0

    :

    1. eklenti "useCursorFetch = true" JDBC URL yapılandırma parametrelerine
    2. çağrı statement.setFetchSize (100)

    Sen den fazla ayrıntı okuyabilir: çözüm olmasıdır Operasyonda 'group_concat' kullandım ve concat dizem çok uzun. Ve ayrıca php kullanarak sorguyu deniyorum, iyi çalışıyor. Group_concat_max_len <32M'yi ayarladığımda, bazı verileri keserek GROUP_CONCAT() tarafından kesildi ve başarıya geri döndü. Ama eğer group_concat_max_len> 32M ise, başarısız oldu. – zhouzuan2k

    +0

    [MySQL-JDBC: Communications Link Failure] 'un olası kopyası (http://stackoverflow.com/questions/2121829/mysql-jdbc-communications-link-failure) – CloudyMarble

    cevap

    6

    Sorun çözüldü. Bunun nedeni sonuç çok büyük. Sorgumda, istemci tarafı imleçleri olan varsayılan imleci kullandım, Bu, bir SELECT'in sonuçta oluşan kayıt kümesinin istemciye (uygulama) döndüğü ve sayfalama işleminin burada yapıldığı anlamına gelir. Böylece toplam sonuç kümesi çok büyük ve jdbc istemcisini belleğin dışına çıkartıyor. http://wiki.gxtechnical.com/commwiki/servlet/hwiki?Client%20and%20server%20cursors%20-%20using%20MySQL

    0

    söz konusu olabilir. İşlemi gerçekleştirmeden önce bağlantı durumunu kontrol etmeyi deneyin.

    +0

    Bağlantı geçerli olduğunda işlem de başarısız olur. Gerçekten de, bu işlemi sadece bağlantı açıldıktan hemen sonra yapmam da başarısız oluyor. – zhouzuan2k

    İlgili konular