Conexão Firebird fora do Netbeans não funciona

5 respostas
D

Pessoal tô com um pequeno problema, fiz um pequeno sistema, dentro do netbeans roda que é uma beleza mas quando mando compilar pra executar a partir do jar não funciona, criei um log pra reportar o erro e dá o seguinte erro:

003014042013 org.firebirdsql.jdbc.FBSQLException: The resultSet is not in a row, use next

5 Respostas

ViniGodoy

Por favor, ao postar tópicos, não deixe o título INTEIRO EM LETRAS MAIÚSCULAS.

ViniGodoy

Esse erro ocorre porque aparentemente você tentou usar os dados de um ResultSet antes de dar next() nele pelo menos uma vez.

Poste o método do erro, indicado no log, para podermos te ajudar melhor.

Tópico movido para o fórum de persistência.

D

Acho que não, mas…:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

        Statement stmt;
        Connection con = null;
        int codigo;
        String nome = null;
        int qtdacesso;
        
        String senha;
        String senha1;
        String s_sql;
        
        senha = crpt(edtSenha.getText());
        
        if("".equals(edtLogin.getText()) || "".equals(edtSenha.getText())){}
        else{
             s_sql = "Select * from CAD_USUARIO where (LOGIN = '"+edtLogin.getText()+"') and (SENHA = '"+senha+"')";
             
             try {
            
            
                 Conecta conexao = new Conecta();
                 conexao.conict();
                 stmt = (Statement) conexao.con.createStatement();
                 try (ResultSet rs = stmt.executeQuery(s_sql)) {
                     rs.next();
                     codigo = rs.getInt("CODIGO");
                     nome = rs.getString("LOGIN");
                     senha1 = rs.getString("SENHA");
                     qtdacesso = rs.getInt("QTDACESSO");
                     qtdacesso = qtdacesso + 1;
                     
                     DateFormat dfmt = new SimpleDateFormat("dd-MM-yyyy");
                     Date hoje = Calendar.getInstance(Locale.getDefault()).getTime();
                     
                     NewClass.acessologin(qtdacesso, dfmt.format(hoje) ,codigo );

                 }
                 stmt.close();
             } catch (SQLException e) {
                 System.out.println(e);
                 String erro = String.valueOf(e);
                 NewClass.Gravar(erro);
             }

        
            if (nome.equals(edtLogin.getText())) {       
           
               // marcar a hora que foi acessado e quem acessolo usar o log
            
               FrmPrincipal formprincipal = new FrmPrincipal();
               formprincipal.show();   
               this.dispose();

             } else {
                 JOptionPane.showMessageDialog(this, "USUÁRIO OU SENHA NÃO CONFERE" );
                 edtLogin.setText("");
                 edtSenha.setText("");
                 edtLogin.requestFocus();
             }
        }
    }
ViniGodoy

É bom testar se o rs.next() retornou true, pois o usuário em questão pode não existir na base de dados:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
    if(edtLogin.getText().isEmpty() || edtSenha.getText().isEmpty()) {
        JOptionPane.showMessageDialog(this, "Preencha um login e uma senha!");
        edtLogin.requestFocusInWindow();
        return;
    }

    String senha = crpt(edtSenha.getText());
    String sql = "SELECT * FROM Cad_Usuario WHERE login=? AND SENHA=?";
    try {
        Conecta conexao = new Conecta();
        conexao.conict();
        try (PreparedStatement stmt = conexao.con.prepareStatement(sql)) {
            stmt.setString(1, edtLogin.getText());
            stmt.setString(2, senha);
            try (ResultSet rs = stmt.executeQuery()) {
                if (!rs.next()) {
                     JOptionPane.showMessageDialog(this, "USUÁRIO OU SENHA NÃO CONFERE" );
                     edtLogin.setText("");
                     edtSenha.setText("");
                     edtLogin.requestFocusInWindow();
                     return;
                }
                DateFormat dfmt = new SimpleDateFormat("dd-MM-yyyy");
                Date hoje = Calendar.getInstance(Locale.getDefault()).getTime();
                NewClass.acessologin(rs.getInt("QTDACESSO")+1, dfmt.format(hoje) ,rs.getInt("codigo"));
            }
        }
    } catch (SQLException e) {
        System.out.println(e);
        String erro = String.valueOf(e);
        NewClass.Gravar(erro);
    }
}
D

Mas se eu rodar direto do Netbeans ele funciona e filtra beleza mas depois de compilado não, e interessante é que ele conecta na base de dados.

public class Conecta {
    
    public Conecta() {    }  
    
    String banco = "C:/sistema/dados/DADOS.GDB";

    private String url = "jdbc:firebirdsql:localhost/3050:"+banco;
    private String driver ="org.firebirdsql.jdbc.FBDriver";
    private String user ="sysdba"; 
    private String pwd = "masterkey";
     
    

    Connection con = null;    
     
    public Connection conict(){
        try{
            Class.forName(driver);
            con = DriverManager.getConnection(url, user,pwd);
            
        }catch(ClassNotFoundException e){
            JOptionPane.showMessageDialog(null,"Erro: "+ e,"ATENÇÃO",JOptionPane.WARNING_MESSAGE);
            String erro = String.valueOf(e);
            NewClass.Gravar(erro);            
        }catch(SQLException e){
            JOptionPane.showMessageDialog(null,"Ocorreu um erro no sistema, se o problema persistir contate o administrador:\n Erro na Conexão com Banco\n"+ e,"ATENÇÃO",JOptionPane.WARNING_MESSAGE);            
            String erro = String.valueOf(e);
            NewClass.Gravar(erro);
}
        System.out.println("Conectado");
        NewClass.Gravar("Conectado");
        return con;  
    }
    
}
Criado 14 de abril de 2013
Ultima resposta 14 de abr. de 2013
Respostas 5
Participantes 2