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