Estou desenvolvendo um app, mas não estou conseguindo me conectar com o banco de dados hospedado no Alphaservers. Estou usando o JDBC. Já tentei colocar as portas 3306, 80, 2083, 443 e nenhuma deu certo.
Aparece o seguinte erro:
E/MYSQL: Erro: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
Nesse Alphaservers, a instalação do mysql eh vc quem fez?
M
maikonzinho
Alphaservers é a empresa que está hospedado meu site, servidor online. minha base de dados está lá também, ela dispõe do phpmyadimin.
Link: https://www.alphaservers.com.br/
M
maikonzinho
Eu já havia criado um site em PHP, e consigo realizar todas as operações com o banco usando o código abaixo. Agora estou criando um app onde quero acessar a mesma base de dados, mas não estou conseguindo.
<?php//conexão com o banco utilizando PDOfunctionconectar(){try{$pdo=newPDO("mysql:host=localhost;dbname=db_cei","fulano_de_tal","beltrano123");}catch(PDOException$e){echo$e->getMessage();}return$pdo;}?>
javaflex
Está habilitado acesso remoto na hospedagem?
M
maikonzinho1 like
Sim! e fiz isso no Cpanel, foi gerado um IP automaticamente para acessarmos por meio dele.
javaflex
Ok entao. No MySql Workbench funciona passando os mesmos parâmetros?
M
maikonzinho
Não consegui conectar com o MySql também.
javaflex
Então nem se preocupe com Java no momento. Resolve primeiro com o suporte dessa hospedagem pra saber por que não está conseguindo se conectar remotamente ao banco, já que você falou que está habilitado.
M
maikonzinho
Blza, vou fazer isso.
M
maikonzinho
Pronto! eu consegui me conectar ao banco usando o Workbanch. Mas agora minha base de dados está hospedada no HostGator.
Falta só conectar pelo app.
javaflex
A mensagem de erro mudou?
M
maikonzinho
Sim.
eu atualizei o drive do MySql connector para o “mysql-connector-java-8.0.21”, está aparecendo a mensagem de erro abaixo:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.mmempresa, PID: 10917
java.lang.NoSuchMethodError: No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; in class Ljava/lang/invoke/LambdaMetafactory; or its super classes (declaration of ‘java.lang.invoke.LambdaMetafactory’ appears in /apex/com.android.runtime/javalib/core-oj.jar)
Meu código é esse:
publicclassdbMySQLextendsActivity{privateConnectionconn=null;privateStatementst;privateStringsql;privateResultSetrs;publicvoidconectarMySQL(Stringhost,Stringporta,Stringbanco,Stringusuario,Stringsenha){try{Class.forName("com.mysql.jdbc.Driver").newInstance();}catch(Exceptionerro){Log.e("MYSQL","Erro: "+erro);}try{conn=DriverManager.getConnection("jdbc:mysql://"+host+":"+porta+"/"+banco+"?useSSL=false",usuario,senha);Log.i("MYSQL","Conectado.");}catch(Exceptionerro){Log.e("MYSQL","Erro: "+erro);}}publicvoiddesconectarMySQL(){try{conn.close();Log.i("MYSQL","Desconectado.");}catch(Exceptionerro){Log.e("MYSQL","Erro: "+erro);}}publicvoidqueryMySQL(){try{st=conn.createStatement();sql="SELECT * FROM usuario";rs=st.executeQuery(sql);rs.first();Log.i("MYSQL","Resultado: "+rs.getString("cpf"));}catch(Exceptionerro){Log.e("MYSQL","Erro: "+erro);}}}
javaflex
Cara, tu quer conectar no MySql diretamente pelo Android? Ideal é ter um backend e fazer chamadas via web services, seguindo REST por exemplo.
M
maikonzinho
Então não dá dessa forma que estou querendo?
Tem algum link pra eu ter uma base de como faz isso…?
M
maikonzinho
Lembrei, já tentei fazer dessa forma, mas não consegui também.
coloquei os arquivos em PHP na hospedagem pra conectar e realizar consultas, mas sem sucesso.
javaflex
Nao sei se dá ou não, mas todo mundo que vejo tentar desiste. É uma solução bizarra, além de expor a porta do banco de dados na internet.
Sobre PHP, qual mensagem de erro deu? Seu backend poderia ser em PHP tranquilamente.
M
maikonzinho
Tem algum link pra eu me basear?
javaflex
No PHP basicamente é fazer a consulta SQL no banco MySql e retornar a resposta do resultset em json:
No Android consome a resposta em json que vai vir da url do seu PHP ou qualquer backend
M
maikonzinho
Blza.
surgiu uma dúvida.
já que os códigos de consulta, inserção e exclusão de dados vão estar nos arquivos armazenados na hospedagem, então qualquer pessoal pode criar um app pra fazer requisição e execução desses códigos, certo? visto que os dados de conexão com o banco (usuário e senha) estarão nesses arquivos.
Quando eu estava tentando fazer assim… eu pensei nisso.
onde está a segurança se eu desenvolver dessa maneira?
javaflex
Usuário e senha de banco de dados estarão protegidos no servidor que contratou. Quem nao tem acesso ao servidor nao terá acesso a esses arquivos.
Da forma que você queria fazer, a senha do banco ficaria no app do celular de cada usuário, o que seria bem grave.
Já sobre segurança dos dados retornados ou postados via http, dá uma lida aqui: