2014-08-23 3 views
0

Ниже приведено подключение к моему пользователю MYSQL, затем он отправляет некоторые данные в таблицу. Я проверил и дважды проверил имя пользователя и пароль, это определенно на 100% правильно, но почему он продолжает бросать эту память утечка? У меня возникли проблемы с этим, я читал все связанные темы, но ни одна из них не кажется той же проблемой, что и моя.MYSQL - сбой связи; timeout

package com.rs.MYSQL; 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.Statement; 

import com.rs.Settings; 
import com.rs.utils.Lottery; 

public class LotteryMYSQL { 

    private static Connection connection; 

    private static long lastConnection = System.currentTimeMillis(); 

    public static void createConnection() { 
     try { 
      Class.forName("com.mysql.jdbc.Driver"); 
      connection = DriverManager.getConnection(
        "jdbc:mysql://runerebellion.com:3306/database", 
        "user", "pass");//fake user&pass 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void destroyConnection() { 
     try { 
      connection.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void init() { 
     createConnection(); 
    } 

    public static boolean updateInfo() { 
     try { 
      if (Settings.DisableMYSQL == true) 
       return false; 
      createConnection(); 
      Statement stmt = connection.createStatement(); 
      if (Lottery.getCurrentLotteryWinner() != null) 
       stmt.executeUpdate("UPDATE info SET moneyEarned = '" 
         + Lottery.options.size() + "', lastWinner = '" 
         + Lottery.getCurrentLotteryWinner() + "'"); 
      else 
       stmt.executeUpdate("UPDATE info SET moneyEarned = '" 
         + Lottery.options.size() + "', lastWinner = '" 
         + Lottery.getLastLotteryWinner() + "'"); 
      destroyConnection(); 
     } catch (Throwable e) { 
      if (System.currentTimeMillis() - lastConnection > 10000) { 
       destroyConnection(); 
       createConnection(); 
       lastConnection = System.currentTimeMillis(); 
      } 
     } 
     return false; 
    } 
} 

Утечка памяти ниже

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(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:408) 
    at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1137) 
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:356) 
    at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2504) 
    at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2541) 
    at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2323) 
    at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:832) 
    at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:46) 
    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:408) 
    at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:417) 
    at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:344) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at java.sql.DriverManager.getConnection(Unknown Source) 
    at com.rs.MYSQL.LotteryMYSQL.createConnection(LotteryMYSQL.java:19) 
    at com.rs.Launcher.main(Launcher.java:103) 
Caused by: java.net.ConnectException: Connection timed out: connect 
    at java.net.DualStackPlainSocketImpl.connect0(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:258) 
    at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:306) 
    ... 16 more 
+1

Вы сможете подключиться к базе данных MySQL с помощью командной строки или клиента, как MySQL верстак? –

+0

Да, я только что протестировал его с помощью программного обеспечения, heidsql @isim – RuneRebellion

+0

@RuneTebellion Этот парень дал довольно полное решение с рядом вещей, чтобы попробовать [здесь] (http://stackoverflow.com/a/10772407/1144203). Попробуй. –

ответ

-1

Используется так: и он работал отлично

Class.forName("com.mysql.jdbc.Driver").newInstance(); 
      String IP = ""; 
      String DB = ""; 
      String User = ""; 
      String Pass = ""; 
      connection = DriverManager.getConnection("jdbc:mysql://" + IP + "/" 
        + DB, User, Pass); 
Смежные вопросы