Estou trabalhando para que meu banco de dados fale com meus programas Java.
Alguém pode me dar um programa de amostra rápido e sujo usando o JDBC?
Estou recebendo um erro estupendo:
Exception in thread "main" 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: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:409)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2260)
at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:787)
at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
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:409)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:357)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:285)
at java.sql.DriverManager.getConnection(DriverManager.java:582)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at SqlTest.main(SqlTest.java:22)
Caused by: 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: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:409)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1122)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:344)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2181)
... 12 more
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:218)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:256)
at com.mysql.jdbc.MysqlIO.<init>(MysqlIO.java:293)
... 13 more
Conteúdo do arquivo de teste:
import com.mysql.jdbc.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class SqlTest {
public static void main(String [] args) throws Exception {
// Class.forName( "com.mysql.jdbc.Driver" ); // do this in init
// // edit the jdbc url
Connection conn = DriverManager.getConnection(
"jdbc:mysql://localhost:3306/projects?user=user1&password=123");
// Statement st = conn.createStatement();
// ResultSet rs = st.executeQuery( "select * from table" );
System.out.println("Connected?");
}
}
Respostas:
Então, você tem um
Estou citando esta resposta, que também contém um tutorial passo a passo do MySQL + JDBC:
Veja também:
fonte
Eu pego essa exceção quando o Java está fora da pilha. Se eu tentar colocar na RAM muitos itens de dados - primeiro pego " Falha no link de comunicação " e depois " OutOfMemoryError ".
Eu registrei e diminuo o consumo de memória (apague 1/2 dados) e está tudo ok.
fonte
No meu caso, eu precisei substituir o Localhost pelo endereço IP do servidor de banco de dados real
Ao invés de
eu precisei
fonte
Essa
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
exceção ocorre se a conexão com o banco de dados estiver inativa por muito tempo.Essa conexão inativa retorna true,
connection.isClosed();
mas se tentarmos executar a instrução, ela disparará essa exceção, por isso vou sugerir que vá com o pool de banco de dados.fonte
Estou com o mesmo problema há horas. Estou usando o servidor MAMP
Em vez de usar localhost: [Apache Port], use sua porta MySQL.
Abaixo está a porta MySQL padrão para o servidor MAMP.
fonte
Talvez eu esteja latindo para a árvore errada aqui, mas sua exceção parece indicar que o servidor MySQL não está disponível.
O que acontece se você tentar (a partir do terminal)
Você será solicitado a senha associada ao nome de usuário. Depois de fornecer a senha correta, o cliente mysql se conecta?
Você pode ter que iniciar o MySQL a partir das Preferências, se não. Você também pode configurá-lo para ser executado na inicialização.
fonte
localhost
, uso o nome de usuário / senha corretos e ele funciona bem.No meu caso, a versão do
mysql-connector-java
era muito antiga.Na minha demonstração, de alguma forma eu uso
mysql-connector-java
assim:Mas no ambiente de desenvolvimento, eu uso isso:
E minha versão do MySQL era 5.1.48 (sim, é antiga, apenas para imitar a versão do produto). Então, eu encontrei o mesmo erro.
Como o motivo é encontrado, a solução também é encontrada. Combine a versão!
fonte
Eu recebi o mesmo erro porque estava tentando executar meu programa sem iniciar o servidor mysql.
Depois de iniciar o servidor mysql, tudo deu certo.
fonte
Respostas anteriores são apropriadas. Gostaria também de apontar para uma questão mais genérica.
Eu enfrentei um problema semelhante e o motivo foi uma restrição de rede da minha empresa.
A mesma conexão estava obtendo sucesso quando eu estava em qualquer outra rede.
fonte
Atualize seu endereço IP no arquivo /etc/mysql/my.cnf
Reinicie os serviços mysql deamon e mysql.
fonte
Faça o download do MySQL-JDBC-Type-4-Treiber (ig 'mysql-connector-java-5.1.11-bin.jar' em 'mysql-connector-java-5.1.11.zip') no Mysql .
Você precisa incluir o jar do driver durante a compilação e o tempo de execução em seu caminho de classe.
fonte
Este erro também pode ocorrer se o Java tentar se conectar ao MySQL por SSL, mas algo der errado. (No meu caso, eu estava configurando conjuntos de conexões Payara Server 5.193.1 para o MySQL.)
Algumas pessoas sugeriram configuração
useSSL=false
. No entanto, desde a versão Connector / J8.0.13
, essa configuração está obsoleta. Aqui está um trecho das propriedades de configuração do MySQL Connector / J 8.0 :Portanto, no meu caso, a configuração
sslMode=DISABLED
era tudo o que eu precisava para resolver o problema. Isso foi em uma máquina de teste. Mas para a produção, a solução segura seria configurar adequadamente o cliente Java e o servidor MySQL para usar SSL.Observe que, ao desativar o SSL, você também pode precisar definir
allowPublicKeyRetrieval=true
. (Novamente, não é uma decisão sábia do ponto de vista da segurança). Mais informações são fornecidas em MySQL ConnectionString Options :fonte
Meu mesmo problema é resolvido pelas seguintes etapas:
Vamos para
my.cnf
Modifique seu endereço de ligação
Reinicie o MySQL
fonte
Se você estiver usando o servidor
WAMP
ouXAMP
para instalar o banco de dados mysql. Então você deve iniciar explicitamente o mysql sever, caso contrário ele mostrarácom.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
ao se conectar com o banco de dadosfonte
Eu resolvi esse problema de uma maneira fácil, que funcionou para mim. Eu tive o problema seme "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: falha no link de comunicações". No meu arquivo db.properties, eu tinha o seguinte: url: jdbc: mysql: // localhost: 90 / myDB, removia apenas o URL da porta, resultando desta maneira url: jdbc: mysql: // localhost / myDB e funcionava para mim .
fonte
Isso aconteceu comigo quando mudei a porta mysql de 3306 para 3307 nos arquivos my.ini e php.ini, mas depois de alterar as portas (3307-> 3306), funcionou bem novamente.
fonte
Se você alterou sua porta, esse tipo de erro é exibido "com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: falha no link de comunicação" Verifique o número da porta
fonte
Apenas experimentei isso.
Preciso fazê-lo funcionar da seguinte maneira: (isso pode ser colocado no inicializador de bloco estático)
Também obtendo a conexão através de:
em vez de especificar os parâmetros de login
Saudações.
fonte
Tente mudar
localhost
para127.0.0.1
.O host local seria resolvido para
::1
. E o MySQL não pode ser conectado via IPv6 por padrão.E aqui está a saída de
telnet localhost 3306
:E não há resposta do servidor MySQL.
Obviamente, verifique se o servidor MySQL está em execução.
fonte
se o mysql versão 8 ou superior for atualizado pelo usuário
fonte
Para Chamada Remota para Mysql
Adicione usuário remoto ao Mysql para, por exemplo, IP = remoteIP:
Permitir acesso remoto ao Mysql (por padrão, todas as chamadas externas não são permitidas):
Para a versão mais recente do driver JDBC, o JDBC:
fonte
Eu tive o mesmo problema e aqui está como foi corrigido:
ResultSet (getString("columnName"))
que não correspondia aos nomes de coluna no meu banco de dados.Não sei exatamente qual resolveu o problema, mas funcionou. Além disso, certifique-se de que você criar um novo
Statement
eResultSet
para cada consulta de tabela.fonte
Pode ser um problema simples de jar. pode ser que você esteja usando um antigo
mysql-connector-java-XXX-bin.jar
que não seja suportado pela sua versão atual do mysql. eu useimysql-connector-java-5.1.18-bin.jar
como estou usandomysql 5.5
e esse problema foi resolvido para mim.fonte
Talvez você não tenha iniciado o Mysql e o Apache Server. Depois que iniciei o servidor Apache e o Mysql no painel de controle do XAMPP, a conexão foi estabelecida com sucesso.
Boa sorte!
fonte
O que resolvi para mim está fazendo duas coisas: 1. crie um novo usuário que não seja root com alguma senha usando os seguintes connads:
2. comente a linha de endereço IP no mysqld.conf
em seguida, conecte-se com o novo nome de usuário e senha. deveria funcionar.
fonte
Ele estava tentando se conectar a uma versão mais antiga do MySQL ('version', '5.1.73'); quando você usa uma versão mais recente do driver, você recebe um erro que diz para usar o "com.mysql.cj.jdbc.Driver ou mesmo que você não precisa especificar qual você usa:
Alterei a declaração para usar a versão 5.1.38 do mysql-connector-java e, no código, mantive o com.mysql.jdbc.Driver .
Tudo começou quando eu vi a resposta do Ankit Jain
fonte
Meu firewall estava bloqueando a publicação 3307 que meu MySQL escutava. Alterei a porta de 3307 para 3306. Em seguida, posso conectar-me com sucesso a um banco de dados.
fonte
No meu MacBook, tenho solucionet este erro apenas quando reinstalar a nova versão do eclipse EE e remover servidores locais como xamp mysql ou mamp, mas usar apenas um deles ...
fonte
No meu caso, eu tive que estabelecer um túnel ssh no banco de dados remoto e todas as configurações estavam corretas e testar a conexão com o PhpStorm também teve êxito. E também o esquema foi carregado, mas não os dados. Em vez disso, obtive:
Nenhuma das sugestões acima funcionou. Por qualquer motivo, tentei resolver o problema simplesmente reiniciando o PhpStorm e pronto!
fonte
Eu estava recebendo vários erros, como:
CommunicationsException: Communications link failure
java.lang.NullPointerException: Attempt to invoke interface method 'java.sql.Statement java.sql.Connection.createStatement()' on a null object reference at
.Eu tive que adicionar:
No AndroidManifest.xml, inclua
<uses-permission android:name="android.permission.INTERNET"/>
logo após a tag de manifesto de abertura.Adicione o driver JDBC às dependências do Gradle (ou Maven).
fonte