Ir ao conteúdo
  • Cadastre-se

Java ResultSet não posicionado corretamente


Posts recomendados

Alguém pode me ajudar com esse código 

Estou com problemas  com esta mensagem:"org.postgresql.util.PSQLException: ResultSet não está posicionado corretamente, talvez você precise chamar next"  ao  salvar no banco de dados o formulário e também ao preencher o ArrayList 

Consigo salvar os dados no banco  esse erro apareceu depois que implementei o código da função AchaTelefone

Esse sistema estou fazendo assistindo essas vídeo aula  

 

https://www.youtube.com/watch?v=1lnf4ZRDduw&t=7s

https://www.youtube.com/watch?v=yjDmlIRzF94

https://www.youtube.com/watch?v=wLC3UGKKlYI&t=399s

https://www.youtube.com/watch?v=_Zzaq5QMpIY&t=37s

https://www.youtube.com/watch?v=h1t7uG-f-8c

 

Código para Salvar 

public class ControleFornecedor {

    ModeloFornecedor mod = new ModeloFornecedor();
    ConectaBanco conn = new ConectaBanco();
    ConectaBanco connAux = new ConectaBanco();
    int codBairro, codTel;

    public void Salvar(ModeloFornecedor mod) {
        AchaBairro(mod.getBairro());
        AchaTelefone(mod.getTelefone());
        conn.conexao();
        try {
            PreparedStatement pst = conn.conn.prepareStatement("insert into fornecedores(nome_fornecedor, endereco,id_bairro,cnpj_fornecedor) values(?,?,?,?)");
            pst.setString(1, mod.getNome());
            pst.setString(2, mod.getEndereco());
            pst.setInt(3, codBairro);
            pst.setString(4, mod.getCNPJ());

public void AchaBairro(String bairro) {
        conn.conexao();
        try {
            conn.executaSQL("select * from bairro where nome_bairro='" + bairro + "'");
            /*conn.executaSQL("select * from bairro where nome_bairro='" + mod.getBairro()+ "'");*/
            conn.rs.first();
            codBairro = conn.rs.getInt("id_bairro");
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro ao buscar codigo do bairro! \nErro:" + ex);
        }
        //conn.desconecta();
    }
    
    public void AchaTelefone(String telefone){
    
        try {
            conn.executaSQL("select * from telefone where numero_tel='" + telefone + "'");
            conn.rs.first();

            codTel = conn.rs.getInt("id_telefone");
        } catch (SQLException ex) {

        }
            
            pst.execute();
            
            /*atualiza a tabela intens_tel_forn*/
            conn.executaSQL("select * from  telefone where numero_tel='" +mod.getTelefone()+" ' ");
            conn.rs.first();
            codTel = conn.rs.getInt("id_telefone");

            conn.executaSQL("select * from fornecedores where nome_fornecedor='" + mod.getNome() + " ' ");

            conn.rs.first();
            int codForn = conn.rs.getInt("id_fornecedor");
            pst = conn.conn.prepareStatement("insert into intens_tel_for(id_fornecedor, id_te) values(?,?)");
            pst.setInt(1, codTel);
            pst.execute();
            JOptionPane.showMessageDialog(null, "Dados inseridos com sucesso!");

        } catch (SQLException ex) {
            //Logger.getLogger(ControleFornecedor.class.getName().log(Level.SEVERE, null, ex);
            JOptionPane.showMessageDialog(null, "Erro na inserção do fornecedor! \nErro:" + ex);

        }
        conn.desconecta();
    }

Código do formulário

public class FrmFornecedor extends javax.swing.JFrame {
      
    ConectaBanco conn = new ConectaBanco();
    ModeloFornecedor mod = new ModeloFornecedor();
    ControleFornecedor control = new ControleFornecedor ();
    
   int muda = 1;

    
    public FrmFornecedor() {
        initComponents();
        preencherCombo();
        conn.conexao();
        
        preencherTabela("select * from fornecedores inner join intens_tel_forn on fornecedores.id_fornecedor=intens_tel_forn.id_fornecedor inner join telefone on intens_tel_forn.id_te=telefone.id_telefone");


private void jButtonSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                              
        // TODO add your handling code here:
        if(muda==1){
        mod.setNome(jTextFieldNome.getText());
        mod.setEndereco(jTextFieldEnd.getText());
        mod.setCNPJ(jFormattedTextFieldCNPJ.getText());
        mod.setBairro((String) jComboBoxBairro.getSelectedItem());
        //mod.setTelefone((String) jFormattedTextFieldTel.getText());
        control.Salvar(mod);
        jTextFieldNome.setEnabled(!true);
        jTextFieldEnd.setEnabled(!true);
        jTextFieldNome.setText("");
        jTextFieldEnd.setText("");
        jTextFieldID.setText("");
        jFormattedTextFieldCNPJ.setText("");
        //jFormattedTextFieldTel.setText("");
        jFormattedTextFieldCNPJ.setEnabled(!true);
        //jFormattedTextFieldTel.setText("");
        jButtonSalvar.setEnabled(!true);
        jButtonNovo.setEnabled(!false);
        preencherTabela("select * from fornecedores inner join intens_tel_forn on fornecedores.id_fornecedor=intens_tel_forn.id_fornecedor inner join telefone on intens_tel_forn.id_te=telefone.id_telefone");

        } else {
        mod.setNome(jTextFieldNome.getText());
        mod.setEndereco(jTextFieldEnd.getText());
        mod.setCNPJ(jFormattedTextFieldCNPJ.getText());
        mod.setBairro((String) jComboBoxBairro.getSelectedItem());
        control.Alterar(mod);
        jTextFieldNome.setEnabled(!true);
        jTextFieldEnd.setEnabled(!true);
        jTextFieldNome.setText("");
        jTextFieldEnd.setText("");
        jTextFieldID.setText("");
        jFormattedTextFieldCNPJ.setEnabled(!true);
        jButtonSalvar.setEnabled(!true);
        jButtonNovo.setEnabled(!false);
        preencherTabela("select * from fornecedores inner join intens_tel_forn on fornecedores.id_fornecedor=intens_tel_forn.id_fornecedor inner join telefone on intens_tel_forn.id_te=telefone.id_telefone");


        }
    }                             


public void preencherTabela(String SQL) {
        
    
    ArrayList dados = new ArrayList();

        String[] Colunas = new String[]{"ID", "Nome", "CNPJ","Telefone"};
        
        conn.executaSQL(SQL);
       
        try {
            
            conn.rs.first();
            do {
                dados.add(new Object[]{conn.rs.getInt("id_fornecedor"), conn.rs.getString("nome_fornecedor"), conn.rs.getString("cnpj_fornecedor"), conn.rs.getString("numero_tel")});
            } while (conn.rs.next());
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro ao preencher o ArrayList!\n ERRO: " + ex);
        }

        ModeloTabela modelo = new ModeloTabela(dados, Colunas);
        tabela.setModel(modelo);
        tabela.getColumnModel().getColumn(0).setPreferredWidth(90);
        tabela.getColumnModel().getColumn(0).setResizable(false);
        tabela.getColumnModel().getColumn(1).setPreferredWidth(200);
        tabela.getColumnModel().getColumn(1).setResizable(false);
        tabela.getColumnModel().getColumn(2).setPreferredWidth(131);
        tabela.getColumnModel().getColumn(2).setResizable(false);
        tabela.getColumnModel().getColumn(3).setPreferredWidth(100);
        tabela.getColumnModel().getColumn(3).setResizable(false);
        tabela.getTableHeader().setReorderingAllowed(false);
        tabela.setAutoResizeMode(tabela.AUTO_RESIZE_OFF);
        tabela.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

    }
    

 

Link para o comentário
Compartilhar em outros sites

@Ferreira27 Um resultset é criado por padrão antes do primeiro registro. Nunca use first() para as suas verificações.

 

A maneira correta e mais segura de fazer é assim:

 

if (conn.rs.next()) {
 //execute seu código 
}

Sempre use next(). Se next() retornar false, significa que o resultset está vazio e nada foi encontrado com os parâmetros enviados no comando SQL.

 

Usando first() você força que seja utilizado o primeiro registro do resultset. Se ele estiver vazio, vai dar erro.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...