Jump to content
RubenFelix

Connecção a um servidor de MySQL

Recommended Posts

RubenFelix

Pessoal, estou aqui com um problema que eu gostava que me pudessem ajudar:

Fiz uma pequena aplicação em Java para ligar a uma base de dados MySQL. Depois de muito tentar, a conexão ficou a trabalhar às mil maravilhas e conseguia obter e inserir informação na base de dados.

Como a aplicação era para disponibilizar por um grupo de pessoas que está a organizar um torneio (A aplicação serve para inserir e modificar jogadores inscritos), decidi montar um servidor em casa em que alojasse a página WEB do torneio e o respectivo servidor MySQL.

Ora agora, o problema é conectar a aplicação Java com o servidor MySQL.

Já meti o ip do servidor com os parâmetros todos correctos e a mensagem de erro é a seguinte:

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.

De referir que na minha rede, existe um router de acesso para o exterior. Já configurei o router para reencaminhar os as portas TCP e UDP 3306 para o IP do computador que esta a fazer de servidor, já configurei a firewall que tenho instalada no servidor para deixar passar o tráfego por essas portas e também já configurei o MySQL para que o acesso do user que configurei possa ser feito a partir de qualquer máquina.

Se me pudessem ajudar agradeceria imenso.

Obrigado.

(Desculpem se a secção não é a mais indicada, mas já estou a sentir-me completamente frustrado)

Share this post


Link to post
Share on other sites
baleado

O problema poderá estar nas permissões de conexão do utilizador ao MySQL, já que parece que o utilizador só tem permissão para aceder a partir da máquina local.

No seguinte URL tens a explicação de como podes alterar os privilégios do utilizador:

http://dev.mysql.com/doc/refman/5.5/en/show-grants.html

Podes usar também ferramentas como o "phpMyAdmin" ou  o "MySQL Administrator" para o fazeres.

Share this post


Link to post
Share on other sites
RubenFelix

Obrigado pela resposta, mas o problema também não está ai. O meu servidor MySQL foi instalado através do xampp. Configurei já os utilizadores para terem acesso do exterior, bem como o phpmyadmin também para ser acessível a partir do exterior e está tudo a funcionar correctamente. Através do phpmyadmin, consigo executar todas as querys que quero através do exterior da rede. O problema está que, com o mesmo utilizador e pass que faço pelo phpmyadmin na minha aplicação Java, nada funciona e ele nem consegue conexão com o servidor.

Share this post


Link to post
Share on other sites
baleado

Ao fazeres querys com o phpMyAdmin estás a fazer querys usando uma conexão local, pois o servidor php corre na mesma máquina que o motor MySQL (assumindo que estão os dois instalados na mesma máquina).

Faz o seguinte, acede ao phpMyAdmin, selecciona o separador "privilégios" clica no botão de editar a informação do utilizador, e na secção "Informação de Login" diz-me o que tens no campo "Máquina".

Se estiver tudo correcto outro problema poderá ser a firewall do servidor.

Share this post


Link to post
Share on other sites
RubenFelix

Em máquina tenho: %

Já não sei mais que fazer, ando a ler que talvez possa ser da aplicação tomcat que o xampp utiliza mas não estou a conseguir chegar lá..

Penso que a firewall não será o problema já que no router já configurei os portos de encaminhamento para o ip do computador que tem o MySQL a funcionar...

Share this post


Link to post
Share on other sites
baleado

O MySQL não tem nada a ver com o tomcat, não me parece que seja por aí.

Podias mostrar qual o url de conexão que estás a usar?

Share this post


Link to post
Share on other sites
RubenFelix

public class Connector{
    private String Host;//MySQL remote machine
    private String DataBase; //Database name
    private String User;
    private String Pass;
    private String sql;
    private String Driver = "com.mysql.jdbc.Driver"; //Driver class of JDBC
    private String Str_conn; //Connection URL

    private void setStr_conn(){
        Str_conn = "jdbc:mysql://" + Host + ":3306/" + DataBase;
    }
    private void changeHost(String Host){
        if(Host.isEmpty()) System.out.println("No host entered");
        else this.Host = Host;
    }
    private void changeDB(String DB){
        if(DB.isEmpty()) System.out.println("No DataBase entered");
        else this.DataBase = DB;
    }
    private void changeUser(String User){
        if(User.isEmpty()) System.out.println("No user selected");
        else this.User = User;
    }
    private void changePassword(String Pass){
        if(Pass.isEmpty()) System.out.println("No password entered");
        else this.Pass = Pass;
    }
    public void setDBProperties(String Host, String DataBase, String User, String Pass){
        if(Host.isEmpty() || DataBase.isEmpty() || User.isEmpty()) System.out.println("Error setting DB properties.");
        else{
            this.Host = Host;
            this.User = User;
            this.DataBase = DataBase;
            this.Pass = Pass;
            setStr_conn();
        }
    }
    public void setSQlQuery(String SQLQuery){
        if(SQLQuery.isEmpty()) System.out.println("No query setted.");
        else this.sql = SQLQuery;
    }
    public ResultSet executeSelect() throws ClassNotFoundException, SQLException{
        if(sql.isEmpty() || Pass.isEmpty() || User.isEmpty() || DataBase.isEmpty() || Host.isEmpty()){
            System.out.println("Error.");
            ResultSet rs = null;
            return rs;
        }
        else{
            Class.forName(Driver); //Faz o carregadomento do Driver.
            //Faz a conecção com a Base de Dados.
            java.sql.Connection conn = DriverManager.getConnection(Str_conn, User, Pass);
            //Cria um statement para podermos executar o query SQL.
            java.sql.Statement stmt = conn.createStatement();
            //Executamos o Query, quardando o resultado no ResultSet.
            ResultSet rs = stmt.executeQuery(sql);
            //Faz o retorno do ResultSet para o utilizador poder ler os dados que pretendeu.
            return rs;
        }
    }
    public void executeQuery() throws ClassNotFoundException, SQLException{
        if(sql.isEmpty() || Pass.isEmpty() || User.isEmpty() || DataBase.isEmpty() || Host.isEmpty()){
            System.out.println("Error.");
            return;
        }
        else{
            Class.forName(Driver); //Faz o carregadomento do Driver.
            //Faz a conecção com a Base de Dados.
            java.sql.Connection conn = DriverManager.getConnection(Str_conn, User, Pass);
            //Cria um statement para podermos executar o query SQL.
            java.sql.Statement stmt = conn.createStatement();
            //Executamos o Query SQL. Se returnar 1, o query foi bem sucedido. Caso contrário, houve uma falha.
            int rs = stmt.executeUpdate(sql);
            if(rs==1) System.out.println("Query bem sucedida");
            else System.out.println("Query falhou");
        }
    }
    public boolean testConnection(){
        boolean aux = true;
        try {
            Class.forName(Driver); //Faz a conecção com a Base de Dados.
        } catch (ClassNotFoundException ex) {
            aux = false;
        }
        try {
            //Faz a conecção com a Base de Dados.
            java.sql.Connection conn = DriverManager.getConnection(Str_conn, User, Pass);
            java.sql.Statement stmt = conn.createStatement();
        } catch (SQLException ex) {
            aux = false;
            System.out.println(ex);
        }
        return aux;
    }
}

Este é a minha class de conexão ao MySQL.

Depois na minha JFrame tenho:

Connection.setDBProperties("lightup.sytes.net","TorneioPesUDRC", "root", "PASS");
        Connect = Connection.testConnection();

Share this post


Link to post
Share on other sites
baleado

Verifica se no ficheiro my.ini tens o porto 3306.

Tenta reiniciar o servidor MySQL para garantir que o servidor assume as novas configurações.

Dá uma olhadela aos ficheiros de log para ver se encontras mais alguma pista.

Desliga todas as firewall e volta a testar.

Share this post


Link to post
Share on other sites
RubenFelix

Decidi testar isto de outra forma: Instalei o xampp num pc cá de casa que liga directamente à internet e voilá, a conexão é feita sem problemas. Portanto o problema neste momento vai para o router...

De qualquer forma, não sei bem que fazer já que nas definições do router já meti os portos de encaminhamento correctos penso eu...

Share this post


Link to post
Share on other sites
RubenFelix

Já esta resolvido.

Depois de ter instalado o xampp num computador que ligasse directamente à internet, percebi que o erro estaria mesmo no router que estava à frente da rede do meu servidor. Ora, como tinha dito, já tinha feito o port forwarding no router.

Ora vamos ao erro (que é ridículo, mas enfim...): metia o forwarding de origem :3306 para o destino :3306 no ip do servidor.

Ora teria de ser de: QUALQUER para o destino :3306...

Enfim...

Obrigado a todos os que me ajudaram. Continuem com esta grande comunidade. Abraços.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.