GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Problema de conexão Java - MySQL

mysql
java
Tags: #<Tag:0x00007fbf2121fe98> #<Tag:0x00007fbf2121fab0>

#1

Olá comunidade GUJ!

Eu sou iniciante na programação em JAVA e estou realizando um projeto para cadastrar alguns dados usando o banco de dados MySQL, porém eu não consigo efetuar conexão.

IDE: Eclipse NEON
Wampserver: Versão 3.0.6 Windows x64
Teste em sistemas: Windows 10 e 7
JDK: Versão 1.8.0_25

Entre os passos para montar o projeto foi pedido para que usasse um pacote .jar. Segue a versão:
mysql-connector-java-5.1.7-bin.jar

O Eclipse não aponta nenhum erro, inclusive eu criei o mesmo projeto no Netbeans (versão 8.1) e repassei os mesmos códigos para todas as classes, ambas as IDEs abrem o projeto mas nenhum deles efetua a conexão com o banco MySQL.

Abaixo eu postei 3 das 8 classes em que há mais envolvimento com o banco de dados:

Classe Fornecedores:

import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.ScrollPaneLayout;
import java.sql.Connection;
import java.sql.DriverManager;
import java.awt.event.*;
import java.sql.SQLException;

public class Fornecedores extends JFrame 
{
	private JTextArea saida;
	private JScrollPane painelTexto;
	private BotaoPainel controles;
	private Connection conecta;
	private MontaTela mostraTela;
	private String url;

	public Fornecedores() 
	{
		setTitle("Cadastro de Fornecedores");
		Container tela = getContentPane();
		mostraTela = new MontaTela();
		saida = new JTextArea(2, 4);
		tela.setLayout(new BorderLayout());
		tela.add(new JScrollPane(mostraTela), BorderLayout.CENTER);
		painelTexto = new JScrollPane(saida);
		tela.add(painelTexto, BorderLayout.SOUTH);

		controles = new BotaoPainel(conecta, mostraTela, saida);
		tela.add(controles, BorderLayout.NORTH);
		setSize(550, 350);

		try 
		{
			url = "jdbc:odbc:Fornecedores";
			Class.forName("sun.jdbc.odbc.jdbcodbcdriver");
			conecta = DriverManager.getConnection(url);
			saida.append("Conexão Efetuada");

		}

		catch (ClassNotFoundException e) 
		{
			saida.append("Não foi possível efetuar");
		}

		catch (SQLException d) 
		{
			saida.append("Não foi possível criar o banco de dados");
		}

		addWindowListener(new WindowAdapter() 
		{

			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
	}

	public static void main(String args[]) 
	{
		new Fornecedores().show();
	}
}

Classe adicionaRegistro


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

	public class adicionaRegistro implements ActionListener
	
	{
		private MontaTela campos;
		private JTextArea saida;
		private Connection conecta;
		
		public adicionaRegistro(Connection c, MontaTela f, JTextArea o)
		
		{
			conecta = c;
			campos = f;
			saida = o;
		}
		
	public void actionPerformed(ActionEvent e)
	{
		try{
			Statement executaSQL = conecta.createStatement();
			if (!campos.Sobrenome.getText().equals("")&& !campos.Nome.getText().equals(""))
			{
				String query = "INSERT INTO Fornecedores(Nome, Sobrenome, Endereco, Cidade, Estado, Cep)"+
				"VALUES('"+campos.Nome.getText()+"', '"+campos.Sobrenome.getText()+"', '"+campos.Endereco.getText()+
				"','"+campos.Cidade.getText()+"','"+campos.Estado.getText()+"','"+campos.Cep.getText()+"')";
				
				int result = executaSQL.executeUpdate(query);
				if (result == 1)
				{
					saida.append("INSERIDO COM SUCESSO");
					campos.Nome.setText("");
					campos.Sobrenome.setText("");
					campos.Endereco.setText("");
					campos.Cidade.setText("");
					campos.Estado.setText("");
					campos.Cep.setText("");
					
				}
				
				else
				{
					saida.append("ERRO NA INCLUSÃO");
					campos.Nome.setText("");
					campos.Sobrenome.setText("");
					campos.Endereco.setText("");
					campos.Cidade.setText("");
					campos.Estado.setText("");
					campos.Cep.setText("");
				}
			}
				
				else
				{
					JOptionPane.showMessageDialog(null,  "PREENCHA OS CAMPOS","ATENÇÃO", JOptionPane.ERROR_MESSAGE);
					executaSQL.close();
				}
				
			}
			
			catch (SQLException sqlex)
			{
				sqlex.printStackTrace();
				saida.append(sqlex.toString());
			}
			
	}
	}
	
	

Classe MontaTela:


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

	public class MontaTela extends JPanel{
		
		private JPanel telaPanel;
		private JLabel lCodigo, lNome, lSobrenome, lCidade, lEndereco, lEstado, lCep, Mensagem;
		JTextField Codigo, Nome, Sobrenome, Endereco, Cidade, Estado, Cep;


		
		public MontaTela(){
			setLayout (null);
			
			lCodigo = new JLabel ("Código");
			lCodigo.setBounds(15,10,70,20);
			add (lCodigo);
			Codigo = new JTextField();
			Codigo.setBounds(95,10,30,20);
			Codigo.setEditable(false);
			add (Codigo);
			
			lNome = new JLabel ("Nome");
			lNome.setBounds(15,40,70,20);
			add (lNome);
			Nome = new JTextField();
			Nome.setBounds(95,40,300,20);
			add (Nome);
			
			lSobrenome = new JLabel ("Sobrenome");
			lSobrenome.setBounds(15,70,70,20);
			add (lSobrenome);
			Sobrenome = new JTextField();
			Sobrenome.setBounds(95,70,250,20);
			add (Sobrenome);
			
			lEndereco = new JLabel ("Endereco");
			lEndereco.setBounds(15,100,70,20);
			add (lEndereco);
			Endereco = new JTextField();
			Endereco.setBounds(95,100,400,20);
			add (Endereco);
			
			lCidade = new JLabel ("Cidade");
			lCidade.setBounds(15,130,70,20);
			add (lCidade);
			Cidade = new JTextField();
			Cidade.setBounds(95,130,200,20);
			add (Cidade);
			
			lEstado = new JLabel ("Estado");
			lEstado.setBounds(15,160,70,20);
			add (lEstado);
			Estado = new JTextField();
			Estado.setBounds(95,160,23,20);
			add (Estado);
			
			lCep = new JLabel ("Cep");
			lCep.setBounds(15,190,70,20);
			add (lCep);
			Cep = new JTextField();
			Cep.setBounds(95,190,70,20);
			add (Cep);
			
			Mensagem = new JLabel ("Formato de Preenchimento do Cep: 99999999");
			Mensagem.setBounds(200,190,300,20);
			add(Mensagem);
		
		}
		
	}

O erro pode estar no próprio phpmyadmin ou será um problema de conflito entre as veersões? (S.O. / IDE / JDK / JAR / WAMP)

Desde já, agradeço a colaboração de quem puder ajudar.


#2

Olá,
nenhum erro ocorre?
Cadê o código que realiza a conexão?


#3

Rodrigo,

Eu havia colocado neste tópico a classe adicionaRegistro duas vezes por engano, acabei de colocar o código da classe Fornecedores acima.

Nenhum erro ocorre, o Eclipse não aponta nenhuma linha de comando.

Aqui segue um trecho do código da classe Fornecedores que realiza a conexão:

try 
	{
		url = "jdbc:odbc:Fornecedores";
		Class.forName("sun.jdbc.odbc.jdbcodbcdriver");
		conecta = DriverManager.getConnection(url);
		saida.append("Conexão Efetuada");

	}

catch (ClassNotFoundException e) 
	{
		saida.append("Não foi possível efetuar");
	}

catch (SQLException d) 
	{
		saida.append("Não foi possível criar o banco de dados");
	}

#4

Estranho, porque ou conecta ou algum erro deve ocorrer.
Adiciona no sou catch:
e.printStackTrace();
Caso der erro será possível vericar a causa.


#5

Rodrigo,

Como você mesmo disse, realmente o Eclipse retornou um erro na execução. Eu adicionei o e.printStackTrace(); na seguinte parte:


catch (ClassNotFoundException e) 
		
		{
			saida.append("Não foi possível efetuar");
			e.printStackTrace();
		}

Ao que parece, deve ser algum problema com a classe do driver de conexão, porém sem o comando do printStackTrace, a IDE não apontava nessa resolução. O console do Eclipse me retornou o seguinte erro:


java.lang.ClassNotFoundException: sun.jdbc.odbc.jdbcodbcdriver
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at Fornecedores.<init>(Fornecedores.java:38)
	at Fornecedores.main(Fornecedores.java:69)

Linha 38:

Linha 69:


#6

Olá amigo! aparentemente o erro indica que a classe não foi encontrada:
Segue um exemplo que uso para testar a conexão em Java - MySQL

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Utilitarios;

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

/**
 *
 * @author aluno
 */
public class Conexao {
    final private String driver = "com.mysql.jdbc.Driver";
    final private String url = "jdbc:mysql://localhost/nomeDoBanco";
    final private String usuario = "root";
    final private String senha = "";
    
    public Connection conectar(){
        Connection conn = null;
        
        try
        {
            Class.forName(driver);
            conn = DriverManager.getConnection(url,usuario,senha);
        }
        catch(ClassNotFoundException ex)
        {
            ex.printStackTrace();
        }
        catch(SQLException ex)
        {
            ex.printStackTrace();
        }
        return conn;
    }
}

#7

meu caro, tente usar seu driver dessa forma aqui:

Class.forName("com.mysql.jdbc.Driver");

outra coisa, da uma olhada na sua string de conexão. tente usar desta forma:

Connection conn = null;
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/dbname","username", "password");

#8

como já foi citado pelos colegas acima, cada banco de dado tem seu driver específico, e suas próprias urls de conexão, ppara o mysql o gabeCosta já te deu a solução, mas obvio que não vai adiantar nada apenas mudar a url de conexão e o nome do driver, você precisa ter o arquivo correspondente ao driver do mysql em seu classpath https://dev.mysql.com/downloads/connector/j/


#9

Olá, @gabeCosta e @icarometal,

Eu realizei uma mescla das linhas de conexões que vocês sugeriram e incorporei à classe Fornecedores. Ela está da seguinte maneira:

import java.sql.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.ScrollPaneLayout;
import java.sql.Connection;
import java.sql.DriverManager;
import java.awt.event.*;
import java.sql.SQLException;

public class Fornecedores extends JFrame 
{
	private JTextArea saida;
	private JScrollPane painelTexto;
	private BotaoPainel controles;
	private Connection conecta;
	private MontaTela mostraTela;
    private String driver = "com.mysql.jdbc.Driver";
    private String url = "jdbc:mysql://localhost:3306/fornecedores";
    private String usuario = "root";
    private String senha = "";

	public Fornecedores() 
	{
		Connection conn = null;
		setTitle("Cadastro de Fornecedores");
		Container tela = getContentPane();
		mostraTela = new MontaTela();
		saida = new JTextArea(2, 4);
		tela.setLayout(new BorderLayout());
		tela.add(new JScrollPane(mostraTela), BorderLayout.CENTER);
		painelTexto = new JScrollPane(saida);
		tela.add(painelTexto, BorderLayout.SOUTH);

		controles = new BotaoPainel(conecta, mostraTela, saida);
		tela.add(controles, BorderLayout.NORTH);
		setSize(550, 350);

		try 
		{
			Class.forName(driver);
			conn = DriverManager.getConnection(url,usuario,senha);
			saida.append("Conexão Efetuada");

		}

		catch (ClassNotFoundException e) 
		{
			saida.append("Não foi possível efetuar");
			e.printStackTrace();
		}

		catch (SQLException d) 
		{
			saida.append("Não foi possível criar o banco de dados");
			d.printStackTrace();
		}

		addWindowListener(new WindowAdapter() 
		{

			public void windowClosing(WindowEvent e)
			{
				System.exit(0);
			}
		});
	}

	public static void main(String args[]) 
	{
		new Fornecedores().show();
	}
}

Porém, o console do Eclipse retorna o seguinte erro:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
	at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
	at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
	at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:260)
	at Fornecedores.<init>(Fornecedores.java:41)
	at Fornecedores.main(Fornecedores.java:71)

#10

Olá @johannsen,

Eu testei alguns arquivos correspondentes de conexão MySQL, porém ainda há algum conflito na classe Fornecedores :

  • mysql-connector-java-5.1.7-bin.jar (orginalmente recomendado)

  • mysql-connector-java-5.1.40 (versão mais atual)

  • mysql-connector-odbc-noinstall-5.3.7-winx64 (versão odbc)

O Wampserver está funcionando normalmente, encontra-se online.


#11

Amigo esse trecho de código que te mandei é uma classe individual de conexão, seria mais “legível” você separar este código em uma classe.

No mais o @johannsen está correto nas afirmações.


#12

Isso aí, basicamente ClassNotFoundException: com.mysql.jdbc.Driver significa que vc está sem o driver do MySQL em seu projeto.
O jar que contem a classe não localizada conforme o erro é:
mysql-connector-java-5.1.40-bin.jar
Baixe o zip:
https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.40.zip
Descompacte e adicione o jar ao seu projeto.

Cuide para ter somente um driver do MySQL adicionado. Mais de 1 pode gerar conflitos.


#13

Olá @gabeCosta,

Eu realizei dois testes de conexão:

  • Fiz a classe apenas para conexão removendo o try da classe fornecedores

  • Deixei o try na classe fornecedores e construi a classe conexão também com seu respectivo try

Mesmo com o Wampserver online, ele ainda não conseguiu conectar. O campo de código do banco de dados na aplicação java fica inacessível devido a não conexão. Eu também já tentei inserir alguns dados diretamente na tabela do phpmyadmin e depois rodar a aplicação no Eclipse, mas mesmo assim ainda não houve conexão


#14

Olá @Rodrigo_Void,

Eu realizei testes individuais de conexão com drivers mysql-connector com versões atuais e antigas, mas mesmo assim não houve sucesso na conexão. Realizei algumas pesquisas e ao que parece as bibliotecas do Java atual não possuem alguns arquivos necessários dentro da pasta Oracle no C:// e que seria necessário acoplar estes arquivos manualmente para a inserção na biblioteca. Tentarei realizar esses e outros procedimentos para ver se dará conexão com o phpmyadmin


#15

Usei várias das últimas versões do Java com MySQL e nenhuma me deu problema. Bem como nunca ouvi falar em algo do tipo. O fato é que se o erro é ClassNotFoundException: com.mysql.jdbc.Driver significa que tens problema com o driver (a falta dele).
No netbeans, na aba Serviços, Banco de Dados, vc pode conectar em seu banco para ver se o problema é do projeto ou é mais em baixo. Se conectar significa que o problema realmente é do seu projeto.
Obs.: O banco no qual está tentando se conectar está na mesma máquina? ou seja, está usando localhost? pois o mysql por default não permite conexão remota sem ser liberado.


#16

Pessoal, problema resolvido. Agradeço a todos pela ajuda e compreensão !!!