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.
importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassTesteSQL{//Class.forName("com.mysql.jdbc.Driver");publicstaticvoidmain(Stringargs[]){Stringurl="jdbc:mysql://localhost/Banco_De_Dados";Stringusername="root";Stringpassword="root";try{Class.forName("com.mysql.jdbc.Driver").newInstance();System.out.println("Driver carregado com sucesso!");}catch(Exceptionex){System.out.println("Driver nao pode ser carregado!");}try{Connectionconn=DriverManager.getConnection(url,username,username);System.out.println("done");}catch(SQLExceptione){// TODO Auto-generated catch blocke.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 =)
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
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?
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
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
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?
Abraços.
Nel, eu sugeri não usar o Class.forName por isso disse para registrar o driver no classpath
E
eliezerbs9
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.
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
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.
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
Forte a braço.
lucasportela
A biblioteca do MySQL está configurada no build path do seu projeto?
E
eliezerbs9
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.
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 :
Stringurl="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
tiagosarj
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
eliezerbs9
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
eliezerbs9
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
eliezerbs9
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
eliezerbs9
Novo erro galera. Porém agora ele diz que o database nao existe.
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!