Problemas com conexão MySql

Olá, pessoal do GUJ !
Estou com um baita problema na conexão de um aplicativo com o banco de dados MySql.
Sempre recebo uma mensagem de que a conexão não foi bem sucedida. Fiz um teste e o registro do Drive está ok !
Gostaria de saber se podem ajudar-me.

Tenho uma classe chamada CadastroClientesProdutos que chama uma classe chamada ConsultaProduto. Esta última por sua vez extende uma classe chamada Conexao, responsável por fazer a conexão com o banco. A classe Conexão implementa uma uma interface chamada DadosConexao, que possui os dados da conexão, o drive, o banco, senha, etc…
A classe ConsultaProduto também implementa um interface chamada DadosConsultaProduto, que tem por objetivo fazer a pesquisa e registrar algumas strings para a montagem da grade.

Bem, o nome do banco é banco mesmo, o usuário do banco não registrei nenhum, deixei root mesmo, e a senha é 1234, assim que instalei o MySql aqui em minha máquina. Já havia feito uma conexão bem sucedida em outra aplicação, mas sei lá por que agora ele apenas registra o drive com êxito e não conecta de maneira nenhuma. Já desinstalei o MySql mais de três vezes deletando todas as pastas para não restar nenhum resquício da instalação, instalei novamente, mas nada de conectar.
Sei que os códigos estão meio grandes, mas se alguém puder ajudar, agradeço.

Abaixo vão os códigos:

Classe CadastroClientesProdutos:

package clientesProdutos;


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class CadastroClientesProdutos extends JFrame implements ActionListener
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
	Dimension tamanho = new Dimension(dim.width/2, dim.height/2);
	
	// Definição dos atributos e classes utilizadas na aplicação
	// Define a barra de menu
	JMenuBar menuBar1;
	
	// Define os menu
	JMenu cadastroCliente, cadastroProduto, sair;
	
	// Define os itens de menu
	
	JMenuItem consultarDadosCliente, consultarDadosProduto, incluirDadosCliente, incluirDadosProduto,
	          alterarDadosProduto, alterarDadosCliente, excluirDadosProduto, excluirDadosCliente; 
	
	public CadastroClientesProdutos()
	{
		controiJanelaPrincipal();
		setVisible(true);
	}
	
	public void controiJanelaPrincipal()
	{
		//definição de propriedades da janela, utilizando métodos da classe JFrame
		setTitle("Eventos de Ação"); //título
		setSize(tamanho); //dimensões
		//centralização da janela
		setLocation((dim.width - tamanho.width)/2, (dim.height - tamanho.height)/2);
		//desliga aplicação ao fechar a janela
		setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		
		setTitle("Manutenção de Clientes e Produtos");
		
		// Instancia o menu principal da aplicação
		menuBar1 = new JMenuBar();
		
		//Instancia os menus da aplicação
		
		cadastroCliente = new JMenu("Clientes");
		cadastroProduto = new JMenu("Produtos");
		sair = new JMenu("Sair");
		
		//Instancia os itens de menu do cliente
		
		incluirDadosCliente = new JMenuItem("Incluir");
		consultarDadosCliente = new JMenuItem("Consultar");
		alterarDadosCliente = new JMenuItem("Alterar");
		excluirDadosCliente = new JMenuItem("Excluir");
		
		//Instancia os itens de menu dos produtos
		
		incluirDadosProduto = new JMenuItem("Incluir");
		consultarDadosProduto = new JMenuItem("Consultar");
		alterarDadosProduto = new JMenuItem("Alterar");
		excluirDadosProduto = new JMenuItem("Excluir");
		
		//Inclui itens de menu como ouvintes de eventos:
		
		//Clientes:
		
		incluirDadosCliente.addActionListener(this);
		consultarDadosCliente.addActionListener(this);
		alterarDadosCliente.addActionListener(this);
		excluirDadosCliente.addActionListener(this);
		
		//Produtos:
		
		incluirDadosProduto.addActionListener(this);
		consultarDadosProduto.addActionListener(this);
		alterarDadosProduto.addActionListener(this);
		excluirDadosProduto.addActionListener(this);
		
		
		//Inclui os itens de menu nos respectivos menus
		
		cadastroCliente.add(incluirDadosCliente);
		cadastroCliente.add(consultarDadosCliente);
		cadastroCliente.add(alterarDadosCliente);
		cadastroCliente.add(excluirDadosCliente);
		
		cadastroProduto.add(incluirDadosProduto);
		cadastroProduto.add(consultarDadosProduto);
		cadastroProduto.add(alterarDadosProduto);
		cadastroProduto.add(excluirDadosProduto);
		
		//Adiciona os itens de menu nos respectivos menus
		
		menuBar1.add(cadastroCliente);
		menuBar1.add(cadastroProduto);
		menuBar1.add(sair);
		
		setJMenuBar(menuBar1);
					
	}
		
	public void actionPerformed(ActionEvent e)
	{
		if(e.getSource()==incluirDadosCliente)
		{	
			JFrame janela = new InclusaoCliente();
			janela.setVisible(true);
		}
		
		if(e.getSource()==consultarDadosCliente)
		{
			JFrame janela = new ConsultaCliente();
			janela.setVisible(true);
		}
		
		if(e.getSource()==consultarDadosProduto)
		{
			new ConsultaProduto();
		}
	}
	
	public static void main(String[] args)
	{
		new CadastroClientesProdutos();
	}
}

Classe ConsultaProduto:

package clientesProdutos;

//Classe e interfaces necessárias para a consulta da tabela produto
import java.util.*;
import java.sql.*;
import javax.swing.*;
import javax.swing.table.*;
import gui.GradeConsultaProduto;

public class ConsultaProduto extends Conexao implements DadosConsultaProduto
{
	//Atributos da classe ConsultaProduto
	Connection con;
	Statement stm;
	ResultSet rs = null;
	//Construtor padrão da classe ConsultaProduto
	public ConsultaProduto()
	{
		//invoca método da classe Conexao para abertura da conexão
		con = abreConexao();
		if (con == null)
		{
			JOptionPane.showMessageDialog(null,
			"Conexão não estabelecida! A aplicação será encerrada.");
			System.exit(0);
		}
		//invoca método para efetivar a consulta
		if(consultar() == false)
			try
		{
				con.close();
		}
		catch(SQLException sqlex)
		{
			String st = "Problema no fechamento da conexão!";
			JOptionPane.showMessageDialog(null, st, "Erro", 0);
			System.exit(0);
		}
	}
	public boolean consultar()
	{
		try
		{
			//criando o espaço para executar declarações
			stm = con.createStatement();
			//cria objeto recordset com o select contido na interface DadosConsultaProduto
			ResultSet rs = stm.executeQuery(QUERY1);
			//array que conterá os títulos das colunas existente na tabela selecionada
			String[] col = new String[4];
			col[0] = TAB1;
			col[1] = TAB2;
			col[2] = TAB3;
			col[3] = TAB4;
			//objeto Vector para acumular os registros contidos na tabela selecionada
			Vector registros = new Vector();
			//enquanto rs.next() retornar true, ou seja, há registro
			while(rs.next())
			{
				//objeto que capturará o conteúdo de cada registro da tabela
				Object[] celula = new Object[4];
				//acumula os conteúdos dos campos de cada registro corrente
				celula[0] = rs.getInt(1);
				celula[1] = rs.getString(2);
				celula[2] = rs.getFloat(3);
				celula[3] = rs.getInt(4);
				registros.add(celula);
			}
			//array bidimensional para organizar os conteúdos da tabela selecionada no objeto Vector
			Object[][] lin = (Object[][])registros.toArray(new Object[0][0]);
			//organização dos dados na interface gráfica
			new GradeConsultaProduto().setDadosGrade(new DefaultTableModel
					(lin, col));
			//fecha ResultSet e Connection
			rs.close();
			con.close();
			return true;
		}
		catch (SQLException sqle)
		{
			String st = "Erro ocorrido!" +
			"\nCódigo: " + sqle.getErrorCode() +
			"\nMensagem: " + sqle.getMessage();
			JOptionPane.showMessageDialog(null, st, "Erro", 0);
			return false;
		}
		catch (Exception ex)
		{
			String msgErro = "Erro ocorrido!" +
			"\nCausa: " + ex.getCause();
			JOptionPane.showMessageDialog(null, msgErro, "Erro", 0);
			return false;
		}
	}
}

Classe Conexao:

package clientesProdutos;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import javax.swing.JOptionPane;

public class Conexao implements DadosConexao
{
	//construtor padrão da classe Conexao
	public Conexao()
	{
		//registro do driver
		if (registraDriver() == false)
		{
			//mensagem informando o não sucesso do registro do driver
			JOptionPane.showMessageDialog(null,
					"Driver não identificado! A aplicação será encerrada.",
					"Erro", 0);
			//finaliza a aplicação
			System.exit(0);
		}
	}
	//método para efetivar o registro do driver
	private boolean registraDriver()
	{
		try
		{
			//registro do driver de conexão
			Class.forName(JDBC_DRIVER);
			//se o driver foi registrado
			return true;
		}
		catch(ClassNotFoundException cnfe)
		{
			//se o driver não foi registrado
			return false;
		}
	}
	//método para abrir a conexão
	public Connection abreConexao()
	{
		try
		{
			//efetiva a conexão, utilizando a URL, usuário e senha do banco de dados
			Connection con = DriverManager.getConnection(DATABASE_URL, USER, PASSWORD);
			System.out.println("passou aqui");
			return con;
		}
		catch(SQLException sqle)
		{
			//problemas durante a conexão
			JOptionPane.showMessageDialog(null,
					"Problemas na conexão! A aplicação será encerrada.",
					"Erro", 0);
			return null;
		}
	}
}

Interface DadosConexao:

package clientesProdutos;

public interface DadosConexao
{
	//atributos para driver JDBC, URL, USUÁRIO E SENHA do banco de dados
	public static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
	public static final String DATABASE_URL = "jdbc:mysql://localhost/banco";
	public static final String USER = "root";
	public static final String PASSWORD = "1234";
}

Interface DadosConsultaProduto:

package clientesProdutos;

public interface DadosConsultaProduto
{
	//Dados para a query de consulta e nomes das tabelas
	public static final String QUERY1 = "SELECT * FROM PRODUTO ORDER BY CODIGO";
	public static final String TAB1 = "codigo";
	public static final String TAB2 = "descricao";
	public static final String TAB3 = "preco";
	public static final String TAB4 = "quantidade_estoque";
}

Agradecido desde já pela ajuda.

Qual o erro q da ae??

jovem tenta adicionar a porta!!

private static final String STR_DRIVER = "org.gjt.mm.mysql.Driver";   
private static final String DATABASE = "aj";   
private static final String IP = "localhost";  //"192.168.0.1"; //"clientes";    
private static final String STR_CON = "jdbc:mysql://" + IP + ":3306/" + DATABASE;   
private static final String USER = "root";   
private static final String PASSWORD = "root";   

Boa tarde

Então Valder, provavelmente deve estar ocorrendo alguma exception, então posta a exception assim fica mais fácil de tentar solucionar seu problema, mas mesmo assim da uma olhada na versão de jar do mysql que você esta utilizando, e também a versão do banco de dados.

Falou.

Esqueleto e Caio, então, nãom sei verificar o erro que está dando, talvez se deixar os catch da conexão sem nenhuma instrução dentro o Java deve retornar o erro. Ou há uma forma de se vereificar a excessão ?

Robson, como eu adiciono esses comandos ? Não sei onde no código adicionar essas instruções. Desculpe-me a lerdeza !

Valeu, pessoal, vou continuar tentando, assim que houver avanços posto aqui, seguirei as recomendações.

Agradeço a ajuda !

Opa, voltei !
Desculpem-me a demora, estive fora !
Seguinte, um amigo disse para eu escrever um código para testar a conexão e a assintura do driver. O código é o seguinte:

package conexao;

import java.sql.*;

public class Conexao
{
	public static void main(String[] args) 
	{
		try
		{
			Class.forName("com.mysql.jdbc.Driver");
			System.out.println("Driver Ok");
			
			Connection con = DriverManager.getConnection("jdbc:mysql://localhost//banco","root","1234");
			System.out.println("Conexão Ok");
			
			con.close();
		}
		catch(ClassNotFoundException cnfe)
		{
			System.err.println("Erro: Driver");
		}
		catch(SQLException cnfe)
		{
			System.err.println(cnfe.getMessage());
		}
	}
}

E está dando a seguinte resposta com o erro em vermelho:

Driver Ok

[color=red]
Communications link failure

Last packet sent to the server was 0 ms ago.
[/color]

Como já foi dito acima, tente adicionar a porta que seu banco está funcionando na URL de conexão. Acho que está faltando somente isso para tudo funcionar…

[]'s.

Kaique, beleza, mas não funcionou, continua o mesmo problema.
Fiz assim, fui na interface DadosConexao e comentei as linhas do meu código original. Copiei e colei as linhas de código do robson. Logicamente mudei o nome do banco e a senha, pois são diferentes do meu. Mas ainda não deu certo.
O estranho é que esse é o código que o professor nos passou, funionou nas máquinas dos colegas de sala e também é o mesmo código que há no livro do Deitel, sem precisar acrescentar a porta, que nem sei o que é. Muito estranho.

Bem, espero continuar obtendo ajuda dos colegas !

Fala cara, blza?

Sei lá, vc esta em rede, tem algum ip na sua máquina?

tente alterar o (“jdbc:mysql://localhost//banco”,“root”,“1234”); colocando o IP da sua máquina…

Pois se funcionou na facul…

Estranho. :?:

Abraço.

Eu, particularmente, nunca vi um SGBD rodar sem estar numa porta.

Posso estar enganado, mas nunca vi.

[quote=Valder Olmo Corrêa]Opa, voltei !
Desculpem-me a demora, estive fora !
Seguinte, um amigo disse para eu escrever um código para testar a conexão e a assintura do driver. O código é o seguinte:

package conexao;

import java.sql.*;

public class Conexao
{
	public static void main(String[] args) 
	{
		try
		{
			Class.forName("com.mysql.jdbc.Driver");
			System.out.println("Driver Ok");
			
			Connection con = DriverManager.getConnection("jdbc:mysql://localhost//banco","root","1234");
			System.out.println("Conexão Ok");
			
			con.close();
		}
		catch(ClassNotFoundException cnfe)
		{
			System.err.println("Erro: Driver");
		}
		catch(SQLException cnfe)
		{
			System.err.println(cnfe.getMessage());
		}
	}
}

E está dando a seguinte resposta com o erro em vermelho:

Driver Ok

[color=red]
Communications link failure

Last packet sent to the server was 0 ms ago.
[/color][/quote]


Olá, faça o seguinte coloque o código dentro de um 
try{
//Codigo de conexao
}catch(Exception e){
e.printStackTrace();
}

E poste a excecao completa aqui.!

Tenta verificar também no seu S.O. se o banco está escutando corretamente uma determinada porta. Pode ser que o serviço não tenha sido iniciado corretamente…

[]'s.

Olá,

Thiago, não, não estou em nenhuma rede não. A única rede que estou usando é a Wirelless aqui, estou no laptop e pego o sinal de internet do roteador que está ligado na torre. Mas sei que esse não é o problems, pois todos os softwares estão instalados no laptop.

Celso, realmente no pocesso de instalação do MySQL ele deixa o banco numa porta, me esqueci qual. mas o código no livro do Deitel não diz nenhuma respeito a isso. Também posso estar enganado e fazendo coisas erradas, mas não vi nenhuma referência a porta no código do professor e nem no livro do Deitel.

Daniel,

coloquei esse código seu aí e a resposta continua sendo a mesma.

Kaique,

como eu faço para verificar se o SO está escutadno uma porta ? Verifiquei os processos e o SO inicia automaticamente o serviço do MySQL.

Putz, está ficando difícil.

[quote=Valder Olmo Corrêa]Olá,

Thiago, não, não estou em nenhuma rede não. A única rede que estou usando é a Wirelless aqui, estou no laptop e pego o sinal de internet do roteador que está ligado na torre. Mas sei que esse não é o problems, pois todos os softwares estão instalados no laptop.

Celso, realmente no pocesso de instalação do MySQL ele deixa o banco numa porta, me esqueci qual. mas o código no livro do Deitel não diz nenhuma respeito a isso. Também posso estar enganado e fazendo coisas erradas, mas não vi nenhuma referência a porta no código do professor e nem no livro do Deitel.

Daniel,

coloquei esse código seu aí e a resposta continua sendo a mesma.

Kaique,

como eu faço para verificar se o SO está escutadno uma porta ? Verifiquei os processos e o SO inicia automaticamente o serviço do MySQL.

Putz, está ficando difícil.[/quote]

Ola, no seu notebook, tem algum programa grafico para acessar o mysql? Tipo sqlyog, ou algum outra, tenta acessar por ele,e ve se esta funcionando;

Neste link http://ubuntuforums.org/showthread.php?t=897729 o autor diz que solucionou o problema trocando Jar do mysql da versao 5.1.5 para 5.16, pois o 5.1.5, estava “corrompido”.

Acredito que possa ser o mesmo problema seu!

No linux eu não me lembro, mas no windows, abra o prompt de comando e digite:

netstat -a

Se você instalou tudo nas configurações default, o mysql deve estar executando na porta 3306, caso realmente esteja iniciado.
Verifica isso e reporta pra gente…

Obs.: dá uma googlada e procura sobre listar processos e portas no Unix, caso seu S.O. seja baseado nele…

[]'s.

kaike,
Sim, é essa mesma a porta : 3306
Daniel, valeu pelo link, vou dar uma olhada e depois posto aqui.
Acho que estou com problemas na configuração do MySQL, tenho que rever isso.

E tem aquele problema de se inserir o Connector-J no classpath, sei lá, um amigo on line me disse isso. O que quer dizer isso, tenho que configurar variável de ambiente para o Connector-J ? Como faço isso ? Qual arquivo inserir ?

Agradeço pela ajuda até agora !

[quote] package clientesProdutos;

public interface DadosConexao  
{  
   //atributos para driver JDBC, URL, USUÁRIO E SENHA do banco de dados  
    public static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";  
    public static final String DATABASE_URL = "jdbc:mysql://localhost:3306/banco"; // isso aqui realmente não resolveu ?? colocar a porta aqui ??  
    public static final String USER = "root";  
    public static final String PASSWORD = "1234";  
}  [/quote]

EDIT: esqueci de escrever… esse 3306 adicionado na sua URL de conexão realmente não resolveu ??

[quote=Valder Olmo Corrêa]

package conexao;

import java.sql.*;

public class Conexao
{
	public static void main(String[] args) 
	{
		try
		{
			Class.forName("com.mysql.jdbc.Driver");
			System.out.println("Driver Ok");
			
			Connection con = DriverManager.getConnection("jdbc:mysql://localhost//banco","root","1234");
			System.out.println("Conexão Ok");
			
			con.close();
		}
		catch(ClassNotFoundException cnfe)
		{
			System.err.println("Erro: Driver");
		}
		catch(SQLException cnfe)
		{
			System.err.println(cnfe.getMessage());
		}
	}
}

E está dando a seguinte resposta com o erro em vermelho:

Driver Ok

[color=red]
Communications link failure

Last packet sent to the server was 0 ms ago.
[/color][/quote]
De acordo com esse seu código postado, acredito que seu problema não seja de classpath. Caso fosse, a mensagem “Driver Ok” não tinha sido impressa. Seu problema está na comunicação com o banco. Tente reinstalar o banco.

Obs.: Caso ainda não tenha alterado, coloca a porta onde o banco está rodando na sua string de conexão, só pra garantir. Até hoje não vi código que conecta com o banco sem que a porta seja especificada… :slight_smile:

[]'s.