Conexão Firebird fora do Netbeans não funciona

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

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

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.

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();
             }
        }
    }  

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

[code]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);
}

}
[/code]

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;  
    }
    
}