Janela de Login

14 respostas
U

Opa!

Meu nome é Thiago e sou iniciante no java. Estou fazendo um programa desktop em java que precisa de acesso restrito.
Então eu tentei com o código abaixo mas ainda não tá dando certo. É uma aplicação em camadas.
Por favor, me ajudem. Aí vai..

Na parte de login há a seguinte estrutura:

login.java ~> É o JFrame onde o usuário entra com o login e senha usuario.java ~> É uma classe com métodos get e set para login, nome e tipo. controleGeral.java ~>Tem um método chamado validaLogin (boolean) que validará o login. Dao.java ~> que fará o select no banco.

O código..

login.java
private void JB_EntrarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        String login = this.JTF_Login.getText();
        String senha = this.JPF_Senha.getText();
        boolean logado = false;

        try {
            logado = controle.validaLogin(login, senha);
        } catch (SQLException ex) {
            Logger.getLogger(login.class.getName()).log(Level.SEVERE, null, ex);
        }

        if (logado = false){
            System.exit(0);
        }else{
            dispose();
        }
    }
Dao.java
public ResultSet login(Usuario usuario) throws SQLException{

        this.openDB();

        String query = "SELECT * FROM usuarios WHERE login=?";

        try{
            pstmt = con.prepareStatement(query);
            pstmt.setString(1, usuario.getLogin());
            pstmt.execute();
            }catch(Exception e){
                JOptionPane.showMessageDialog(null, "Impossível logar " + e);
            }

        this.closeDB();

        if(result.next()){
            return result;
            }else{
            return null;
            }
    }

controleGeral.java

public class controleGeral {
    String login1;
    String senha1;
    ResultSet resultado;
    public boolean validaLogin(String login2, String senha2) throws SQLException{
        login1 = login2;
        senha1 = senha2;
        boolean logado = false;

        Usuario usuario = new Usuario();
        usuario.setLogin(login2);
        /*usuario.setSenha(senha2);*/

        Dao acesso = new Dao();
        resultado = acesso.login(usuario);

        if(!resultado.next()){
            JOptionPane.showMessageDialog(null, "Login inexistente!");
        }else{
            if(login1.equals(resultado.getString("login"))){
                if(senha1.equals(resultado.getString("senha"))){
                    usuario.setLogin(resultado.getString("login"));
                    usuario.setTipo(resultado.getString("tipo"));
                    usuario.setNome(resultado.getString("nome"));
                    logado = true;
                }else{
                    logado = false;
                    usuario.setLogin(null);
                    usuario.setNome(null);
                    usuario.setTipo(null);
                }
            }else{
                logado = false;
                usuario.setLogin(null);
                usuario.setNome(null);
                usuario.setTipo(null);
            }
        }
        return logado;
    }
}
Usuario.java
public class Usuario {
    private String login;
    private String nome;
    private String tipo;

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getTipo() {
        return tipo;
    }

    public void setTipo(String tipo) {
        this.tipo = tipo;
    }
}

O erro:

Exception occurred during event dispatching: java.lang.NullPointerException at persistencia.Dao.login(Dao.java:77) at controle.controleGeral.validaLogin(controleGeral.java:24) at menus.login.JB_EntrarActionPerformed(login.java:123) at menus.login.access$100(login.java:10) at menus.login$2.actionPerformed(login.java:56) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6289) at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) at java.awt.Component.processEvent(Component.java:6054) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4652) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4482) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4482) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644) at java.awt.EventQueue.access$000(EventQueue.java:85) at java.awt.EventQueue$1.run(EventQueue.java:603) at java.awt.EventQueue$1.run(EventQueue.java:601) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) at java.awt.EventQueue$2.run(EventQueue.java:617) at java.awt.EventQueue$2.run(EventQueue.java:615) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.awt.EventQueue.dispatchEvent(EventQueue.java:614) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178) at java.awt.Dialog$1.run(Dialog.java:1046) at java.awt.Dialog$3.run(Dialog.java:1098) at java.security.AccessController.doPrivileged(Native Method) at java.awt.Dialog.show(Dialog.java:1096) at java.awt.Component.show(Component.java:1585) at java.awt.Component.setVisible(Component.java:1537) at java.awt.Window.setVisible(Window.java:842) at java.awt.Dialog.setVisible(Dialog.java:986) at menus.Menu01.formWindowOpened(Menu01.java:159) at menus.Menu01.access$000(Menu01.java:6) at menus.Menu01$1.windowOpened(Menu01.java:31) at java.awt.Window.processWindowEvent(Window.java:1862) at javax.swing.JFrame.processWindowEvent(JFrame.java:274) at java.awt.Window.processEvent(Window.java:1823) at java.awt.Component.dispatchEventImpl(Component.java:4652) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4482) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644) at java.awt.EventQueue.access$000(EventQueue.java:85) at java.awt.EventQueue$1.run(EventQueue.java:603) at java.awt.EventQueue$1.run(EventQueue.java:601) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) at java.awt.EventQueue$2.run(EventQueue.java:617) at java.awt.EventQueue$2.run(EventQueue.java:615) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.awt.EventQueue.dispatchEvent(EventQueue.java:614) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Muito obrigado, mesmo não podendo ajudar.
Thiago

14 Respostas

W

Ola,

Bem, eh uma java.lang.NullPointerException provavelmente vc esta tentando acessar algo que eh nulo.
Tenta debugar esse metodo login na classe Dao, e verifique se tudo esta sendo inicializado corretamente.

Um chute que eu daria eh essa linha:

if(result.next())

Onde vc inicializa “result” ???

Outra coisa eh que vc o metodo login retorna ResultSet, e vc esta fazendo um pstmt.execute() que vai retornar boolean, talvez seja melhor trocar pra pstmt.executeQuery();

Neste caso, vc poderia alterar um pouco o seu codigo para:

public ResultSet login(Usuario usuario) throws SQLException{  
  
        this.openDB();  
  
        String query = "SELECT * FROM usuarios WHERE login=?";  
        ResultSet result; 

        try{  
            pstmt = con.prepareStatement(query);  
            pstmt.setString(1, usuario.getLogin());  
            result = pstmt.executeQuery();  

            return (result.next() ? result : null);

        }catch(Exception e){  
            JOptionPane.showMessageDialog(null, "Impossível logar " + e);  
        }  
        finally {
            this.closeDB();  
        }  

    }

ps: nao testei o codigo, entao talvez vc tenha que fazer umas alteracoes. :slight_smile:

//Daniel

mauricioadl

o problema me parece estar la no JFrame login, cola ele ae pra gente dar uma olhada.

U

Falae,

Esse "result" é uma variável global que eu inicializei na declaração.

public class Dao
{
    Connection con;
    PreparedStatement pstmt;
    ResultSet result = null;

...

Eu coloquei "pstmt.executeQuery();" mas continuou com o mesmo erro.

De acordo com as suas respostas, eu fiz uns testes:

1)
public ResultSet login(Usuario usuario) throws SQLException{

        this.openDB();
        
        String query = "SELECT * FROM usuarios WHERE login=?";
        JOptionPane.showMessageDialog(null, usuario.getLogin());
...

Ele me mostrou o login certo.

2)
try{
            pstmt = con.prepareStatement(query);
            pstmt.setString(1, usuario.getLogin());
            pstmt.executeQuery();
            JOptionPane.showMessageDialog(null, usuario.getLogin());
            JOptionPane.showMessageDialog(null, result.getString("login"));
            }

Ele continuou me mostrando o login certo, porém na hora de mostrar o result, ele caiu no catch

catch(Exception e){
                JOptionPane.showMessageDialog(null, "Impossível logar " + e);
            }
Me mostrando
Impossível logar java.lang.NullPointerException

Então imaginei que o problema estivesse no result. Até que percebi que eu não estava botando o "result" pra receber esse resultado

pstmt.executeQuery();
Então fiz isso...
try{
            pstmt = con.prepareStatement(query);
            pstmt.setString(1, usuario.getLogin());
            result = pstmt.executeQuery();
            }catch(Exception e){
                JOptionPane.showMessageDialog(null, "Impossível logar " + e);
            }
           this.closeDB();

        if(result.next()){
            return result;
            }else{
            return null;
            }
}
E ele me retornou o seguinte erro:
16/04/2011 17:27:58 menus.login JB_EntrarActionPerformed GRAVE: null java.sql.SQLException: Operation not allowed after ResultSet closed at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1055) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:956) at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:926) at com.mysql.jdbc.ResultSetImpl.checkClosed(ResultSetImpl.java:768) at com.mysql.jdbc.ResultSetImpl.next(ResultSetImpl.java:7008) at persistencia.Dao.login(Dao.java:64) at controle.controleGeral.validaLogin(controleGeral.java:24) at menus.login.JB_EntrarActionPerformed(login.java:123) at menus.login.access$100(login.java:10) at menus.login$2.actionPerformed(login.java:56) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6289) at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) at java.awt.Component.processEvent(Component.java:6054) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4652) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4482) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4482) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644) at java.awt.EventQueue.access$000(EventQueue.java:85) at java.awt.EventQueue$1.run(EventQueue.java:603) at java.awt.EventQueue$1.run(EventQueue.java:601) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) at java.awt.EventQueue$2.run(EventQueue.java:617) at java.awt.EventQueue$2.run(EventQueue.java:615) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.awt.EventQueue.dispatchEvent(EventQueue.java:614) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:178) at java.awt.Dialog$1.run(Dialog.java:1046) at java.awt.Dialog$3.run(Dialog.java:1098) at java.security.AccessController.doPrivileged(Native Method) at java.awt.Dialog.show(Dialog.java:1096) at java.awt.Component.show(Component.java:1585) at java.awt.Component.setVisible(Component.java:1537) at java.awt.Window.setVisible(Window.java:842) at java.awt.Dialog.setVisible(Dialog.java:986) at menus.Menu01.formWindowOpened(Menu01.java:159) at menus.Menu01.access$000(Menu01.java:6) at menus.Menu01$1.windowOpened(Menu01.java:31) at java.awt.Window.processWindowEvent(Window.java:1862) at javax.swing.JFrame.processWindowEvent(JFrame.java:274) at java.awt.Window.processEvent(Window.java:1823) at java.awt.Component.dispatchEventImpl(Component.java:4652) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4482) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644) at java.awt.EventQueue.access$000(EventQueue.java:85) at java.awt.EventQueue$1.run(EventQueue.java:603) at java.awt.EventQueue$1.run(EventQueue.java:601) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) at java.awt.EventQueue$2.run(EventQueue.java:617) at java.awt.EventQueue$2.run(EventQueue.java:615) at java.security.AccessController.doPrivileged(Native Method) at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) at java.awt.EventQueue.dispatchEvent(EventQueue.java:614) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

ps: a linha 64 tinha

if(result.next()){

3) Com o erro acima, imaginei que o problema pudesse estar naquele if no retorno. Então comentei ele e pus
"JOptionPane.showMessageDialog(null, result.getString("login"));"
dentro do try, porém ele continuou com o erro NullPointerException.

Não sei mais o que fazer... rs =/

U

mauricioadl, o JFrame de Login

package menus;

import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import controle.controleGeral;

public class login extends javax.swing.JDialog {
    controleGeral controle = new controleGeral();
    /** Creates new form login */
    public login(java.awt.Frame parent, boolean modal) {
        super(parent, modal);
        try {
            UIManager.setLookAndFeel("com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel");
            SwingUtilities.updateComponentTreeUI(this);
        } catch (Exception e) {
            e.printStackTrace();
        }
        initComponents();
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        JTF_Login = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        JB_Entrar = new javax.swing.JButton();
        jLabel4 = new javax.swing.JLabel();
        JPF_Senha = new javax.swing.JPasswordField();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("Acesso Restrito");
        setModal(true);
        setResizable(false);

        jLabel1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/img/Login.png"))); // NOI18N

        jLabel2.setText("Login:");

        JTF_Login.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JTF_LoginActionPerformed(evt);
            }
        });

        jLabel3.setText("Senha:");

        JB_Entrar.setText("Entrar");
        JB_Entrar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JB_EntrarActionPerformed(evt);
            }
        });

        jLabel4.setFont(new java.awt.Font("Calibri", 1, 48));
        jLabel4.setText("Acesso Restrito");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(27, 27, 27)
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 139, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel2)
                        .addGap(23, 23, 23)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(JB_Entrar, javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(JTF_Login, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 217, Short.MAX_VALUE)))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(jLabel3)
                        .addGap(18, 18, 18)
                        .addComponent(JPF_Senha, javax.swing.GroupLayout.DEFAULT_SIZE, 217, Short.MAX_VALUE)))
                .addGap(43, 43, 43))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(84, Short.MAX_VALUE)
                .addComponent(jLabel4)
                .addGap(83, 83, 83))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jLabel4)
                .addGap(16, 16, 16)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                    .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(JTF_Login, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(jLabel2))
                        .addGap(12, 12, 12)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER)
                            .addComponent(jLabel3)
                            .addComponent(JPF_Senha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addGap(30, 30, 30)
                        .addComponent(JB_Entrar)))
                .addContainerGap(13, Short.MAX_VALUE))
        );

        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        setBounds((screenSize.width-490)/2, (screenSize.height-293)/2, 490, 293);
    }// </editor-fold>                        

    private void JTF_LoginActionPerformed(java.awt.event.ActionEvent evt) {                                          
        // TODO add your handling code here:
    }                                         

    private void JB_EntrarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        String login = this.JTF_Login.getText();
        String senha = this.JPF_Senha.getText();
        boolean logado = false;

        try {
            logado = controle.validaLogin(login, senha);
        } catch (SQLException ex) {
            Logger.getLogger(login.class.getName()).log(Level.SEVERE, null, ex);
        }

        if (logado = false){
            System.exit(0);
        }else{
            dispose();
        }
    }                                         

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                login dialog = new login(new javax.swing.JFrame(), true);
                dialog.addWindowListener(new java.awt.event.WindowAdapter() {
                    public void windowClosing(java.awt.event.WindowEvent e) {
                        System.exit(0);
                    }
                });
                dialog.setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton JB_Entrar;
    private javax.swing.JPasswordField JPF_Senha;
    private javax.swing.JTextField JTF_Login;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    // End of variables declaration                   

}

ps: Estou fazendo esse projeto no NetBeans

Anime

Oi,

O Vini deu uma aula aqui…http://www.guj.com.br/java/215775-login-usuario-nao-esta-entrando-desktop

W

Vc esta chegando la!!

O problema eh que vc esta fechando a conexao do banco antes do result.next() por isso que esta dando essa exception:
java.sql.SQLException: Operation not allowed after ResultSet closed

Por isso que eu sugeri vc fazer da seguinte forma:

try{ 
   pstmt = con.prepareStatement(query); 
   pstmt.setString(1, usuario.getLogin()); 
   result = pstmt.executeQuery(); 
   return (result.next() ? result : null); 
}catch(Exception e){ 
    JOptionPane.showMessageDialog(null, "Impossível logar " + e); 
} 
finally { 
   this.closeDB(); 
}

Dessa forma (colocando o this.closeDB() dentro do finally) vai ser a ultima coisa a ser executada nesse metodo e tb vai fechar a conexao independendo do que acontecer (erro ou nao).

Reescreve o codigo exatamente como eu coloquei.

//Daniel

U

Opa! Muito obrigado!!!

Realmente os erros sumiram quando tirei o


this.closeDB();

Aí eu tentei reescrever o método exatamente como você escreveu aqui, porém o netbeans tava reclamando pq o return tinha que ser a última coisa a acontecer.

Então eu deixei o método da maneira que estava antes, tirei mesmo o this.closeDB();. Porém eu coloquei botei pra fechar essa conexão no outro método.

Quero dizer, esse método está retornando esse ResultSet pra um método que vai fazer a validação do usuário. Eu agora estou fechando a conexão no final do método de validação. Assim não dá erro e continua validando também.
Pode até ter sido uma gambiarra, mas foi como consegui fazer funcionar. rs

Muito obrigado mesmo a todos que me ajudaram!!

W

ururay:
Opa! Muito obrigado!!!

Realmente os erros sumiram quando tirei o


this.closeDB();

Aí eu tentei reescrever o método exatamente como você escreveu aqui, porém o netbeans tava reclamando pq o return tinha que ser a última coisa a acontecer.

Então eu deixei o método da maneira que estava antes, tirei mesmo o this.closeDB();. Porém eu coloquei botei pra fechar essa conexão no outro método.

Quero dizer, esse método está retornando esse ResultSet pra um método que vai fazer a validação do usuário. Eu agora estou fechando a conexão no final do método de validação. Assim não dá erro e continua validando também.
Pode até ter sido uma gambiarra, mas foi como consegui fazer funcionar. rs

Muito obrigado mesmo a todos que me ajudaram!!

Legal que deu certo.

O ideal, ter um metodo login, abra a conexao com o banco, faz o que tem que fazer e fecha a conexao.

Talvez vc nao precise retornar um ResultSet com o resultado da sua query. Vc precisa avaliar qual o proposito desse metodo login, vc quer retornar dados do usuario ou quer somente validar o login??
Se for somente validar o login talvez vc pode retornar boolean ao invez de ResultSet e fazer algo do tipo:

public boolean login(Usuario usuario) throws SQLException{ 

   this.openDB(); 

   String query = "SELECT * FROM usuarios WHERE login=?"; 
   ResultSet result; 
   boolean isLoginValid = false;

   try{ 
      pstmt = con.prepareStatement(query); 
      pstmt.setString(1, usuario.getLogin()); 
      isLoginValide = pstmt.execute(); 
   }catch(Exception e){ 
       JOptionPane.showMessageDialog(null, "Impossível logar " + e); 
   } 
   finally { 
      this.closeDB(); 
   } 

   return isLoginValid;

}

Porque eu acho que o metodo login deve fazer somente uma coisa que eh validar o login e nao trazer dados do usuario.

ps: finalmente as tags code funcionaram!!! :smiley:

//Daniel

U

Sim, eu concordo plenamente! O ideal seria o método login abrir e fechar a conexão.

A questão é que eu preciso retornar alguns dados como o nível do usuário. Aí eu não posso retornar somente um boolean.
E po, não vejo momento melhor pra trazer esse tipo de informação do que na hora do login.

ps: Aaeeee! Já tava na hora! rs

R

uma dúvida…
percebi q vc seta o nome(setNome) após a validação do login…
como vc vai recuperar este nome (getNome) na frame principal por exemplo?
(se vc instanciar a classe Usuario usuario = new Usuario(); não retornaria…tem que ser a mesma instância da classe Usuario…certo!?)

desculpe a ignorância…

obs…: até conseguiria resolver esse problema de outras formas…mas queria saber a maneira correta…

valeu… :?

U

renatodervelan_,

Para recuperar o valor dessa váriavel, é necessário o seguinte:

  1. Ser uma variável de instância;
  2. Estar declarada como “private static nomeDaVariavel;”

Depois basta chamar:

Usuario usuario = new Usuario(); JLabel_Nome.setText(usuario.getNome());

Que isso! É melhor perguntar do que continuar sem saber.

ps: não sei dizer se esse é o modo mais correto. Mas é como eu faço.

R

hum…mas ururay no momento que vc faz :

Usuario usuario = new Usuario();

Você não está mais na mesma instância…o usuario.getNome() vai vir em branco…não?!

hehe…valeu…

U

Acredito que não. Quando você realiza esse código, você está criando uma instância da classe Usuario.

Esse valor vai estar armazenado e vai ser recuperado de lá.

Elbill

ururay:

Acredito que não. Quando você realiza esse código, você está criando uma instância da classe Usuario.

Esse valor vai estar armazenado e vai ser recuperado de lá.

Não é isso que está acontecendo no meu caso! Estou setando uma variável da classe Y pela classe X e quando vou acessar essa mesma variável da classe Y pela classe A ela vem zerada… Como solucionar esse problema? Alguém pode ajudar?

Criado 15 de abril de 2011
Ultima resposta 22 de ago. de 2012
Respostas 14
Participantes 6