Problema no método next();

Oi gente

Estou tentando validar login de usuario e senha usando next();
Se os campos estiverem preenchidos corretamente, o jframe fecha. Se estiver errado, o os campos se limpam.
Mas mesmo se estiver errado, o jframe ta fechando. E o pior, não é erro de conexão nem de código… é lógica mesmo.

      try{
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        Connection con;
        con = DriverManager.getConnection("jdbc:mysql://localhost/dbsf", "root", "");
        try{
          Statement st = con.createStatement();
          String selectquery = "select usuario, senha from login";
          ResultSet rs = st.executeQuery(selectquery);


          boolean valida = false;
          valida = rs.next();



           if(valida == true){
             JOptionPane.showMessageDialog(null, "Logado");
             dispose();
          }else{
              JOptionPane.showMessageDialog(null, "Dados incorretos ou não cadastrados");
          }
          txtusu.setText("");
          txtpass1.setText("");
        }
         
        
        catch(SQLException s){
          System.out.println(s);
        }
        con.close();
      }
      catch (Exception e){
        e.printStackTrace();
      }
    }

Onde to errando? :frowning:

O erro é que voce nao esta validando coisa alguma.

O código acima vc apenas selecionou todos os dados da tabela Login e esta mostrando somente os campos usuario e senha; tem alguma validação? rsrs

Isso sim é validação…


try{  
  Class.forName("com.mysql.jdbc.Driver").newInstance(); //Não faço ideia pq todos colocam isto aki, teoricamente esta sendo instanciado um objeto. mais não há nada armazenando a instancia deste objeto.
//O correto no meu ponto de vista seria // Object obj = Class.forName("com.mysql.jdbc.Driver").newInstance();// Desse modo o objeto instanciado poderá ser usado nas próximas linhas de código.
  
  Connection con;  
  con = DriverManager.getConnection("jdbc:mysql://localhost/dbsf", "root", "");  
  
  try{  
      
    String SQL = "SELECT usuario,senha FROM login WHERE usuario = ? AND senha = ?";  
    PreparedStatement st = con.PreparedStatement(SQL);
    
    st.setString(1, jTextUser.getText());
    st.setString(2, jTextPassword.getText());

    ResultSet rs = st.executeQuery();  
  
     if(rs.next()){  
       JOptionPane.showMessageDialog(null, "Logado");  
       dispose();  
    }else{  
        JOptionPane.showMessageDialog(null, "Dados incorretos ou não cadastrados");  
    }  
    
  }  
     
  catch(SQLException s){  
    System.out.println(s);  
  }  
  con.close();  
}  
catch (Exception e){  
  e.printStackTrace();  
}  

[quote=charleston10]O erro é que voce nao esta validando coisa alguma.

O código acima vc apenas selecionou todos os dados da tabela Login e esta mostrando somente os campos usuario e senha; tem alguma validação? rsrs

Isso sim é validação…

E SQL Injection …

nao comentei sobre isso pq na verdade o assunto era sobre validação.
mas se for levar em conta ensina ele usar PrepareStatement na boa, é q to sem tempo…

Sem bronca mano, so comentei tb, o foco é outro mesmo =D

O post já esta resolvido, agora se alguém poder me explicar pq todos colocam isto na hora de criar a conexão com o banco.

Teoricamente não serve pra nada.

Agora nesse esquema, ela já pode vir a servir para alguma coisa, pois o objeto instanciado poderá ser usado.

Valeu!!!

[quote=tsartori]O post já esta resolvido, agora se alguém poder me explicar pq todos colocam isto na hora de criar a conexão com o banco.

Teoricamente não serve pra nada.

Agora nesse esquema, ela já pode vir a servir para alguma coisa, pois o objeto instanciado poderá ser usado.

Na realidade o código certo é apenas

que é uma instrução para jvm procurar e carregar aquela classe.

Também existe um outro problema. Este código só deve ser chamado uma única vez na aplicação. Quando ela inicia, claro está.
Este código não é necessário se estiver usando jee ou webcontainers com jndi como o tomcat. Nesses casos o driver é configurado declarativamente e o application server é que vai dar o comando acima.
Dar o comando a toda a vez que usa a conexão é fazer a jvm procurar algo que ela já tem e portanto tempo desperdiçado.