Java + BD MySQL Online

5 respostas
A

Bom dia,

tenho uma aplicação rodando normalmente usando o bando de dados mysql local, entratanto preciso agora que esses dados fiquem disponíveis remotamente.
Para isso repliquei meu banco local para a web também mysql e alterei a string de conexão, entretanto não consigo realizar a conexão com o banco web.

Abaixo segue o código da conexão e a mensagem de erro.

package mpe;

import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 *
 * @author cce
 */
public class conexao {
    
static String status = "";

public static Connection getConnection() {
    
Connection conn = null;

try {

	Class.forName("com.mysql.jdbc.Driver").newInstance();

	String url = "jdbc:mysql://fdb3.awardspace.com/1161200_mpe?user=1161200_mpe&password=8or4ever";
       
	conn = DriverManager.getConnection(url);

	status = "Connection opened";

}



	catch (SQLException e) {
		status = e.getMessage();
	}

	catch (ClassNotFoundException e) {

		status = e.getMessage();

	}

	catch (Exception e) {

		status = e.getMessage();

	}


	return conn;

}
}

Erro:

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.

Alguém pode me dar uma luz ??? :frowning:

5 Respostas

W

Para conexão remota, você precisa:

  1. entrar no Manager Security (é uma opção do MySQL Workbench);
  2. selecionar o seu SGBD local e clicar em OK (deve se chamar mysqld@localhost);
  3. você vai ver um lista de usuários, selecione o usuário utilizado pela sua aplicação web;
  4. informa % no campo “Limit Connectivity to Hosts Matching”.

Esta alteração faz seu SGBD MySQL aceitar conexão do usuário quando estiver em outras máquinas.

A porta padrão do MySQL é 3306, por isso, você também deverá liberar esta porta em todos os firewall entre o servidor web e seu servidor de banco de dados.

wiliamps

BrunoFurtado

Segue exemplo de conexão.

package br.com.site.persistence.mysql;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import br.com.site.persistence.DaoFactory;

public class MysqlDaoFactory extends DaoFactory {

	public static final String MYSQL_DRIVER = "com.mysql.jdbc.Driver";
	public static final String URL_CONNECTION = "jdbc:mysql://127.0.0.1:3307/MeuBanco";
	public static final String USER = "usuario";
	public static final String PASS = "senha";	
	
	public static Connection createConnection() throws ClassNotFoundException, SQLException {
		Class.forName(MYSQL_DRIVER);
		return DriverManager.getConnection(URL_CONNECTION, USER, PASS);
	}
	
	public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {
		try {
			if (rs != null)
				rs.close();
			
			if (ps != null)
				ps.close();
			
			if (conn != null)
				conn.close();	
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}
	
}
A

Continua dando erro :frowning:

O código da classe ficou assim:

package mpe;

import java.sql.Connection;
import java.sql.DriverManager;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
  
public class conexao {
    
    
    public static String status = "";

    public static final String MYSQL_DRIVER = "com.mysql.jdbc.Driver";  
    public static final String URL_CONNECTION = "jdbc:mysql://fdb3.awardspace.com:3306/1161200_mpe";  
    public static final String USER = "1161200_mpe";  
    public static final String PASS = "8or4ever";    
      
public static void createConnection() throws ClassNotFoundException, SQLException {  
         Class.forName(MYSQL_DRIVER);
         DriverManager.getConnection(URL_CONNECTION, USER, PASS);
         status = "Connection opened";
}
      
public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {  
        try {  
            if (rs != null) {
                rs.close();
            }  
              
            if (ps != null) {
                ps.close();
            }  
              
            if (conn != null) {
                conn.close();
            }     
        } catch (SQLException e) {  
        }  
    }  
      
}

A classe que testa a conexão:

import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import mpe.conexao;

public class MPE {

    public static void main(String[] args) {
        try {
            conexao.createConnection();
            
        } catch (ClassNotFoundException | SQLException ex) {
            Logger.getLogger(MPE.class.getName()).log(Level.SEVERE, null, ex);
        }
    System.out.println("testando...");
    System.out.println(conexao.status);

        
        
    }
}

e o LOG do erro:

SEVERE: null
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:525)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)

at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1117)

at com.mysql.jdbc.MysqlIO.(MysqlIO.java:350)

at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2408)

at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2445)

at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2230)

at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:813)

at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:47)

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:525)

at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)

at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:399)

at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:334)

at java.sql.DriverManager.getConnection(DriverManager.java:579)

at java.sql.DriverManager.getConnection(DriverManager.java:221)

at mpe.conexao.createConnection(conexao.java:21)

at MPE.main(MPE.java:11)

Caused by: java.net.ConnectException: Connection refused: connect

at java.net.DualStackPlainSocketImpl.connect0(Native Method)

at java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:69)

at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)

at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)

at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)

at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:157)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)

at java.net.Socket.connect(Socket.java:579)

at java.net.Socket.connect(Socket.java:528)

at java.net.Socket.(Socket.java:425)

at java.net.Socket.(Socket.java:241)

at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:259)

at com.mysql.jdbc.MysqlIO.(MysqlIO.java:300) 16 more

Começando a ficar desesperado :frowning:

Gleidson_Henrique

Baixe o MySql Tools. Nele tem o MySQL Administrator.

Tente-se conectar por ele. Assim que conseguir conectar, quer dizer que não existe problemas entre o seu computador e o db remoto.

Tem duas coisas que pode estar acarretando nesse problema. Dentro do mysql, entre um db chamado ‘mysql’. Nele, existe algumas tabelas que contem os users. Veja se nessa tabela existe o usuario que voce está tentando usar e veja se no campo ‘host’ está escrito ‘localhost’ ou está ‘%’.

Outra coisa que prejudica a conexao é o firewall. Até mesmo o firewall do windows.

Abraços

edu_merckx

amasarac, só uma dica: não exponha os dados de acesso…

Criado 6 de outubro de 2012
Ultima resposta 9 de out. de 2012
Respostas 5
Participantes 5