Versão atual:

Reescrever código com o recurso try-with-resources

Tenho o seguinte problema, atualmente tenho um código de autenticação de login, porém toda vez que faço o login tenho problemas com a conexão com o banco que permanece aberta, com este problema descobri o recurso try-with-resources, porém como sou extremamente novo no mundo da programação não estou conseguindo criar a classe de corretamente.

Abaixo código original funcional, porém que não fecha conexão normalmente:

    Connection conn = null;
    ResultSet rs = null;
    PreparedStatement pst = null;

conn = JavaConnect.connectDb();
       String sql = "SELECT * FROM usuarios where nome_usuario= ? and senha_usuario= ?";
        try{
            pst = conn.prepareStatement(sql);
            pst.setString(1,jtxtUsuario.getText());
            pst.setString(2,jtxtSenha.getText());

            rs = pst.executeQuery();
            if(rs.next()){
                jfrmPrincipal principal = new jfrmPrincipal();
                principal.setVisible(true);
                this.dispose();
            }
            else{
                JOptionPane.showMessageDialog(null, "Senha ou Usuário Incorreto");
            }
        }catch(Exception e){
            JOptionPane.showMessageDialog(null, e);
        }
    }

Um grande problema ai é que este código estava sendo escrito diretamente no JFRAME e não em uma classe, logo tentei passar o código em uma classe e depois chamar o metodo, porem por falta de experiencia não consegui terminar o código por que não sei o que fazer, segue abaixo a classe que tentei criar chamada LoginDAO:

``` public void search(Login l){

    try
    {
       Connection conn = JavaConnect.connectDb();
       PreparedStatement pstmt = conn.prepareStatement(SQL_CONSULTA);
       ){

       pstmt = setString(1, l.getNome());
       pstmt = setString(2, l.getSenha());

       pstmt.executeQuery();
    }
    }
    catch(SQLException ex)
    {
        JOptionPane.showMessageDialog(null,"Erro ao inserir dados no DataBase.");
    }
    finally
    {
        JavaConnect.DesconnectDb(c,ps);
    }
    }

E como não estava conseguindo chamar o txt do Jframe na classe criei um GET/SET para passar os dados que irão ser validados na classe:

public class Login {

    private int id;
    private String nome;
    private String senha;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

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

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        this.senha = senha;
    } 
}

E dentro do botão do Jframe eu deixo o seguinte código para tentar passar as informações:

 private void jbtnConfimarActionPerformed(java.awt.event.ActionEvent evt) {                                             
       Login l = new  Login();
       LoginDAO dao = new LoginDAO();

       l.setNome(jtxtUsuario.getText());
       l.setSenha(jtxtSenha.getText());

       dao.search(l);

       this.dispose();
       jfrmPrincipal principal = new jfrmPrincipal();
       principal.setVisible(true);
    }

O meu maior problema e a falta de experiencia e não estou conseguindo passar o código da maneira que quero, que é usando o recurso do try-with-resources, por favor preciso de apoio para reescrever este código.

Versão(1):

Ver a versão formatada

Reescrever código com o recurso try-with-resources

Comentário

new question