Ajuda erro JDBC

23 respostas
E

Olá galera, eu estava tentando criar uma tabelinha simples do banco de dados.
Primeiro fui criar uma classe de teste(não queria alterar o código do meu programa sem ter certeza de que funcionaria) p/ ver se conseguia criar a tabela sem problemas.
Porém, quando criei ocorreu um erro, gostaria que vcs pudessem me explicar que erro é esse e porque ele está ocorrendo.
Ja agradeço a ajuda.

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

public class TesteSQL {
	
	
	
	//Class.forName("com.mysql.jdbc.Driver");


	
	
	
	
	public static void main(String args[]){
		String url="jdbc:mysql://localhost/Banco_De_Dados";
		String username="root";
		String password="root";
		
		
		
		
		try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            System.out.println("Driver carregado com sucesso!");
        }
        catch (Exception ex) {
            System.out.println("Driver nao pode ser carregado!");
        }
	
		
		try {
			Connection conn = DriverManager.getConnection(url,username,username);
			System.out.println("done");
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 
		
}


}

O erro é o seguinte:

Driver carregado com sucesso!
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:411)
at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
at com.mysql.jdbc.MysqlIO.(MysqlIO.java:344)
at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2333)
at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2370)
at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2154)
at com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:792)
at com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:47)
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:411)
at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:381)
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
at perfaco.pagamento.TesteSQL.main(TesteSQL.java:36)
Caused by: java.net.ConnectException: Connection refused: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(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.(Unknown Source)
at java.net.Socket.(Unknown Source)
at com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257)
at com.mysql.jdbc.MysqlIO.(MysqlIO.java:294)
... 15 more

Sou novato em java ainda, então se for algum erro infantil desculpem minha ignorância =)

23 Respostas

mapleplayer

A partir do JDBC 4 não é mais preciso carregar a classe do driver com o Class.forName

Pode usar direto a classe (ou é uma interface? não lembro) responsável pelos Drivers, DriverManager

DriverManager.getConnection(string_de_conexao, user, psw)

Não se esqueça de registrar o driver do seu BD no classpath tbm

Veja o primeiro capítulo da apostila fj21 da caelum

nel

Oi!

Teu banco está no ar amigão!?
Tens certeza que fez as configurações corretamente?

O erro diz que não foi possível estabelecer uma comunicação, houve falha no envio de pacotes.
Tente informar a porta na URL de conexão, algo como:

jdbc:mysql://server:3306/database

Abraços.

nel

mapleplayer:
A partir do JDBC 4 não é mais preciso carregar a classe do driver com o Class.forName

Pode usar direto a classe (ou é uma interface? não lembro) responsável pelos Drivers, DriverManager

DriverManager.getConnection(string_de_conexao, user, psw)

Não se esqueça de registrar o driver do seu BD no classpath tbm

Veja o primeiro capítulo da apostila fj21 da caelum

O JDBC 4 e seu respectivo suporte não é a todo Java.
Tudo depende do container (caso use) e de suas respectivas configurações.
Sem falar que tem alguns critérios para utilização do JDBC 4, então, não é assim simples :slight_smile:

Outro detalhe, o Class.forName() faz justamente o registro do Driver no classpath, o que o JDBC 4 faz “automaticamente”, com restrição.
O você disse não foi coerente, concorda? :slight_smile:

Abraços.

mapleplayer

Notei q vc passa o username como psw no metódo getConnection do DriverManager

mapleplayer

Duh, o psw eh o msm q o username
sorry

mapleplayer

nel:
mapleplayer:
A partir do JDBC 4 não é mais preciso carregar a classe do driver com o Class.forName

Pode usar direto a classe (ou é uma interface? não lembro) responsável pelos Drivers, DriverManager

DriverManager.getConnection(string_de_conexao, user, psw)

Não se esqueça de registrar o driver do seu BD no classpath tbm

Veja o primeiro capítulo da apostila fj21 da caelum

O JDBC 4 e seu respectivo suporte não é a todo Java.
Tudo depende do container (caso use) e de suas respectivas configurações.
Sem falar que tem alguns critérios para utilização do JDBC 4, então, não é assim simples :slight_smile:

Outro detalhe, o Class.forName() faz justamente o registro do Driver no classpath, o que o JDBC 4 faz “automaticamente”, com restrição.
O você disse não foi coerente, concorda? :slight_smile:

Abraços.

Nel, eu sugeri não usar o Class.forName por isso disse para registrar o driver no classpath

E

Eu ja exclui esse Class.forName() e ja adicionei a .jar no Build Path e continua dando o mesmo erro =/.
Ja mudei tambem a URL, coloquei um localhost e nada.

O erro deve estar na minha url porque eu resumi o código e deixei ele no mais básico possivel. Mesmo assim continua dando erro.

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


public class TesteSQL {
	
	
	public static void main(String args[]) throws SQLException{
		//String username="root";
		//String password="root";
		
		Connection conn = DriverManager.getConnection("jdbc:mysql://localhost/database");
		System.out.println("done");
		conn.close();

Obrigado pela ajuda pessoal!

mapleplayer

tente com o seu username e psw
DriverManager.getConnection(“jdbc:mysql://localhost/database”, username, psw);

o usuário padrão do mysql se não me engano é root e não tem senha, ficaria assim
DriverManager.getConnection(“jdbc:mysql://localhost/database”, “root”, “”);

E

Fiz assim também(Usando usuário “root” e senha “”), não deu.
Deve ser algum problema na máquina; algum firewall, antivirus que está bloqueando a conexão.
Peguei a apostila da Caelum e fiz igualzinho os exemplos, tambem não foi.
Ja tentei de todos os jeitos, usando a porta 3306, usando uma classe separada…
Ta dificil esse aqui.

nel

eliezerbs9:
Fiz assim também(Usando usuário “root” e senha “”), não deu.
Deve ser algum problema na máquina; algum firewall, antivirus que está bloqueando a conexão.
Peguei a apostila da Caelum e fiz igualzinho os exemplos, tambem não foi.
Ja tentei de todos os jeitos, usando a porta 3306, usando uma classe separada…
Ta dificil esse aqui.

Desabilita o firewall e o antivírus e tente novamente.
Em código, a principio, está tudo correto, como postou inicialmente, não esquecendo de adicionar a porta na URL.
Fora isso, é verificar configurações do seu MySQL e etc, acesso ele por um Client e veja se consegue realizar a conexão.

Tem o próprio client do MySQL, senão, use o DbVisualizer 7.1.4 (ou versão mais atual). É via JDBC e lá você insere a URL, com usuário e senha.
Podes testar de modo fácil dai :slight_smile:

Forte a braço.

lucasportela

A biblioteca do MySQL está configurada no build path do seu projeto?

E

Sm, sim. A biblioteca esta configurada no Build Path do projeto-

nel

Oi!

O seu problema persiste? Se sim, você baixou o client conforme comentei a você?
Isso é questão de URL e/ou configuração do seu banco de dados amigo, simples assim.

Polverini
String url="jdbc:mysql://localhost/Banco_De_Dados";

Nessa linha de endereço vc colocou o nome do banco que existe ??

Exemplo no mysql tenho um schema que chama pizza a url seria :

String url="jdbc:mysql://localhost/pizza";

se não for isso é problema do banco de dados que não está funcionando ou vc instalou ele em uma porta diferente a 3306 !

lucasportela

Se a biblioteca está configurada no build path, então com certeza seu MySQL não está configurado com a porta padrão, tente descobrir qual porta está usando ou reconfigurar o MySQL ou senão reinstale.

T

Olá, eliezerbs9. Seu serviço mysql_client pode não estar iniciado. Que sistema operacional você utiliza? Caso seja windows, vá em executar e digite “services.msc” (sem aspas) e tecle . Depois procure por algum serviço do mysql client, clique com o botão direito e escolha “iniciar”. Se for linux, digite no terminal mysqld_safe.

abraço.

E

Po cara… ainda nao funciona, ja fiz tudo oq a galera ai sugeriu e nada.
Uma dúvida, onde exatamente seria esse localhost?
eu sei que é a minha máq, + em qual lugar especificamente?

No caso, se eu quisesse mudar o local do banco p/ minha área de trabalho, como eu faço isso?
Grato!

E

Galera, usei o comando netstat -an e não apareceu a porta 3306. Será que é algum erro de configuração do mysql mesmo?
Valeu a ajuda pessoal!

E

Bom galera, reinstalei o mysql e apareceu a porta 3306 no netstat, o problema é que ela está em TIME_WAIT.
Será esse o problema?
Valeu!

E

Novo erro galera. Porém agora ele diz que o database nao existe.

<blockquote>Exception in thread main java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database banco_de_dados

at perfaco.pagamento.jdbc.getConnection(jdbc.java:14)

at perfaco.pagamento.TestaConexao.main(TestaConexao.java:11)

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database banco_de_dados

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

at com.mysql.jdbc.Util.getInstance(Util.java:386)

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3597)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3529)

at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:935)

at com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4101)

at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1300)

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

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

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

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

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

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

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

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

at java.sql.DriverManager.getConnection(Unknown Source)

at java.sql.DriverManager.getConnection(Unknown Source)

at perfaco.pagamento.jdbc.getConnection(jdbc.java:12)

 1 more

</blockquote>

Valeu a ajuda!

lucasportela
public boolean conectar() {
        try {
            configura();
            Class.forName(driver);
            conexao = DriverManager.getConnection(url,user,pass);
            return true;
        }
        catch (ClassNotFoundException e){
            System.out.println("ERRO: " + e);
        }
        catch (SQLException e) {
            System.out.println("ERRO: " + e);
        }
        return false;
    }

Testa com essa url abaixo… é a url padrão do mysql, se não der certo eu me aposento…

URL(PADRÃO)

url = jdbc:mysql://localhost:3306/mysql

lucasportela

Um exemplo de criar sua database pelo próprio java
https://sites.google.com/site/lucasportela/home/java/criandodatabasepelojava

E

Bom galera, o site que o amigo me passou funcionou.
Dei uma analisada e ao que me parece, era porque a minha variavel conn não estava como private.
Bom, eu mudei e agora o código funciona ;D
Obrigado a ajuda de todos!

Criado 8 de agosto de 2011
Ultima resposta 10 de ago. de 2011
Respostas 23
Participantes 6