Conexão com MySQL

5 respostas
W

Olá! Estou usando Netbeans e Mysql(wampserver), mas não consigo estabelecer a conexão.
O código está simplório, mas é o 1º exemplo.

private void btInserirActionPerformed(java.awt.event.ActionEvent evt) {                                          
        try{ //tratamento de erros
        Class.forName("con.mysql.jdbc.Driver");//Driver JDBC
        //conecta no BD
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/ex_login","root","");
        Statement stmt = con.createStatement();       //objeto comando sql
        String usuario = txtusuario.getText();      //obtém nome digitado
        String senha = camposenha.getPassword().toString();
        stmt.executeUpdate("INSERT INTO tablogin (usuario,senha) VALUES ('" + usuario + "','" + senha +  "')" );
        JOptionPane.showMessageDialog( this, " Dados Salvos! ");
        con.close();  // fecha conexão com BD
        } 
        catch( SQLException e){ //trata os erros SQL
            JOptionPane.showMessageDialog(this, "Erro Comando SQL " + e.getMessage() );
        } 
        catch( ClassNotFoundException e){      //trata erros de conexão
             JOptionPane.showMessageDialog( this, " Driver não encontrado " );
        }
    }

No netbeans, adicionei a biblioteca Driver JDBC do MySQL. Na aba Serviços, seleciono o BD e conectar (o driver, logo abaixo, mostra que está conectado).
No MySQL (wampserver) criei o BD ex-login, a tabela tablogin e os campos.
O que está errado? pois quando executo, recebo uma mensagem de driver não encontrado.

5 Respostas

Ruttmann

Você precisa, além de adicionar o driver ao seu projeto, adicioná-lo ao Build Path do mesmo, senão ocorre esse erro pois o Java não consegue encontrar as classes necessárias.

W

E como eu faço isso?
Pode me orientar?
Obrigado

Ruttmann

E como eu faço isso?
Pode me orientar?
Obrigado

Eu não uso Netbeans. Procurei por alguma instrução pra fazer isso pelo Netbeans, mas não encontrei nada.

Acredito porém que é similar ao que é feito via Eclipse: Com .jar do MySQL já dentro do seu projeto, clique nele com o botão direito, Build Path, Add to Build Path.

W

Consegui fazer a conexão e inserir dados no BD, mas não consigo fazer a consulta.
Onde eu errei? Alguém poderia me auxiliar?
O código para inserir (que está funcionando) é:

private void btInserirActionPerformed(java.awt.event.ActionEvent evt) {                                          
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost/ex_login", "root", "");
            String query = "Insert into tablogin (usuario, senha, email) VALUES (?, ?, ?)";
            PreparedStatement stmt = con.prepareStatement(query);
            stmt.setString(1, txtusuario.getText());
            stmt.setString(2, camposenha.getText());
            stmt.setString(3, txtemail.getText());
            stmt.executeUpdate();
            JOptionPane.showMessageDialog(this, "Dados salvos!!!");
            limpar();
            stmt.close();
            con.close();
                        
        } catch (ClassNotFoundException ex) {
            JOptionPane.showMessageDialog(null, "Driver não encontrado");
        } catch (SQLException e){
            JOptionPane.showMessageDialog(null, "Erro comando SQL: " + e.getMessage());
        }                
    }

O código para consultar (que devolve mensagem de Driver Não Encontrado) é:

private void btConsultarActionPerformed(java.awt.event.ActionEvent evt) {                                            
        //AINDA COM ERROS..... PRECISA VERIFICAR...
        boolean consulta=false;
        String email="";
        try{ //tratamento de erros
            Class.forName("con.mysql.jdbc.Driver");//busca Driver
            Connection con=DriverManager.getConnection("jdbc:mysql://localhost/ex_login","root","");
            String query = "SELECT * FROM tablogin WHERE usuario= ? AND senha= ?";
            PreparedStatement stmt = con.prepareStatement(query);
            stmt.setString(1, txtusuario.getText());
            stmt.setString(2, camposenha.getText());
            ResultSet RS= stmt.executeQuery();
            consulta=true;
            JOptionPane.showMessageDialog(this,"Dados Encontrados!");
            while(RS.next()){
                email = RS.getString("email");
                
            }
            txtemail.setText(email);
            if (!consulta) JOptionPane.showMessageDialog(this,"Dados Não Encontrados!");
            RS.close();
            stmt.close();
            con.close(); //fecha conexão com BD
        } catch(SQLException e){ //trata os erros
            JOptionPane.showMessageDialog(this,"Erro Comando SQL "+e.getMessage());
        } catch(ClassNotFoundException e){
            JOptionPane.showMessageDialog(this,"Driver não encontrado");

        }
    }
A

Olá wls2015,

  1. Acredito que você precisa criar uma classe ou um método para realizar a conexão com o banco de dados. Replicar os dados da conexão em todos os métodos é trabalhoso e acaba gerando erros que já haviam sido resolvidos. Por Exemplo:
public Connection getConnection() trhows SQLException{  
        Connection connection = null;  
  
        try {  
            /* Obtém o driver de conexão com o banco de dados */  
            Class.forName("com.mysql.jdbc.Driver");  
  
            /* Configura os parâmetros da conexão */  
            String url = "jdbc:mysql://localhost/ex_login";  
            String username = "root";   
            String password = "";  
              
            /* Tenta se conectar */  
            connection = DriverManager.getConnection(url, username, password);  
  
            /* Caso a conexão ocorra com sucesso, a conexão é retornada */  
            return connection;  
              
        } catch(ClassNotFoundException e){  
            JOptionPane.showMessageDialog(this,"Driver não encontrado. "+ e.printStackTrace()); 
    }
  1. Durante a programação devemos ter muita atenção ao erro lançado pelo programa e erro lançado pelo programador.
    No seu código, o programador informou o erro “Driver não encontrado” ao entrar no
    "} catch(ClassNotFoundException e){ ". O desejável, durante o desenvolvimento, é que o erro do programa seja exibido. Ou seja, deve exibir “e.getMessage()” ou o “e.printStackTrace()” para saber o motivo real do erro e em qual linha do código ocorreu o erro.

  2. Se vc está realizando um consulta você pode ter como resultado apenas um registro, vários registros ou nenhum registro. Por isso vc precisa de uma lista de Objetos que represente a “tablogin”. Ou precisa utilizar como consulta a chave primária da Tablea tabLogin. Abaixo eu fiz o código utilizando como se realizasse uma consulta que pode retornar vários resultados.

public class TabLogin{
    private String usuario;
    private String senha;
    private String email;

   /* métodos de get e set*/
}

...

private void btInserirActionPerformed(java.awt.event.ActionEvent evt) {                                            
        try {  
            ArrayList listaTabLogin = new ArrayList<TabLogin>();
            Connection con = getConection();
 String query = "SELECT usuario, senha, email FROM tablogin WHERE usuario= ? AND senha= ?";  
            PreparedStatement stmt = con.prepareStatement(query);  
            stmt.setString(1, txtusuario.getText());  
            stmt.setString(2, camposenha.getText());  
            ResultSet RS= stmt.executeQuery();  
            consulta=true; 
            /* Se vc não tiver nenhum resultado da sua consulta vc não terá dados
                JOptionPane.showMessageDialog(this,"Dados Encontrados!");  
            */
            while(RS.next()){  
                TabLogin tabLogin = new TabLogin();
                tabLogin.setUsuario(RS.getString("usuario"));  
                tabLogin.setSenhal(RS.getString("senha"));  
                tabLogin.setEmail(RS.getString("email"));  
                listaTabLogin.add(tabLogin); 
                  
            }
            /*  
            Nesse momento a sua lista de tabLogin pode estar vazia, com um registro ou vários registros
            txtemail.setText(email);  
            if (!consulta) JOptionPane.showMessageDialog(this,"Dados Não Encontrados!");  
            */

            Iterator itListaTabLogin = listaTabLogin.iterator();
            while(itListaTabLogin.hasNext()){             
                        TabLogin tabLogin= (tabLogin) itListaTabLogin.next();  
                        JOptionPane.showMessageDialog(this,tabLogin.getEmail());            
            }          

            RS.close();  
            stmt.close();  
            con.close(); //fecha conexão com BD  
        } catch(SQLException e){ //trata os erros  
            JOptionPane.showMessageDialog(this,"Erro Comando SQL "+e.getMessage());  
        } catch(ClassNotFoundException e){  
            JOptionPane.showMessageDialog(this,"Driver não encontrado");  
  
        }                
    }
  1. Hehehe. Vamos ao erro do ClassNotFoundException. Não está fazendo muito sentido uma vez que vemos esse erro se o driver JDBC não for encontrado. Se vc conseguiu executar o método de inserção vc deveria conseguir executar a consulta sem lançar o erro de ClassNotFoundException. Devo imaginar que:
    a) O método de consulta está em outro pacote diferente do método de inserir
    b) Ou vc realizou a consulta de inserir e consultar em momentos diferentes e deve ter modificado o PATH do projeto e desconfigurou e perdeu novamente o driver JDBC.
    Vc precisa configurar adicionar o PATH do JDBC ao seu projeto para funcionar.
Criado 1 de outubro de 2015
Ultima resposta 9 de out. de 2015
Respostas 5
Participantes 3