Quando a pesquisa acha registro no banco de dados não acontece nada

6 respostas Resolvido
java
M

Bom dia.
tenho uma classe dao onde ao pesquisa no banco de dados e não achar registro ele me retorna que não foi encontrado nenhum registro, mas quando ele acha o registro não acontece nada.

//metodo para pesquisa uma lista de registro pela nota
    public List<Compra> buscarCompraPorNota(int numNota){
        try {
            //criando a lista.
            List<Compra> lista = new ArrayList<>();
            //comando sql para lista os dados.
            String sql = "select codigo_compra, num_nota, serie, dt_entrada, dt_emissao, fornecedor, empresa, "
                    + "almoxarifado, tipo_entrada, forma_pagamento, total, frete, icms_subst, outra_despesa, "
                    + "total_geral from tb_compras inner join tb_fornecedores on (cod_fornecedor = codigo_fornecedor) "
                    + "inner join tb_empresas on (cod_empresa = codigo_empresa) "
                    + "inner join tb_almoxarifados on (cod_almoxarifado = codigo_almoxarifado) "
                    + "inner join tb_tipos_entradas on (cod_tipo_entrada = codigo_tipo_entrada) "
                    + "inner join tb_formas_pagamentos on (cod_forma_pagamento = codigo_forma_pagamento) "
                    + "where num_nota = ?";

            PreparedStatement stmt = con.prepareStatement(sql);
            stmt.setInt(1, numNota);
            ResultSet rs = stmt.executeQuery();
            
            if(rs.next() == false){
                JOptionPane.showMessageDialog(null, "Nenhum Registro Foi Encontrado Para Essa Pesquisa!");
            }else{
                
                System.out.println("Foi Encontrada A Nota: "+ numNota);
                while (rs.next()){
                    Compra obj = new Compra();
                    Fornecedor f = new Fornecedor();
                    Empresa e = new Empresa();
                    Almoxarifado a = new Almoxarifado();
                    TipoEntrada t = new TipoEntrada();
                    FormaPagamento fp = new FormaPagamento();
                    
                    obj.setCodigo(rs.getInt("codigo_compra"));
                    obj.setNumNota(rs.getInt("num_nota"));
                    obj.setSerie(rs.getInt("serie"));
                    obj.setDtEntrada(rs.getDate("dt_entrada"));
                    obj.setDtEmissao(rs.getDate("dt_emissao"));
                    f.setNomeFornecedor(rs.getString("fornecedor"));
                    obj.setFornecedor(f);
                    e.setEmpresa(rs.getString("empresa"));
                    obj.setEmpresa(e);
                    a.setAlmoxarifado(rs.getString("almoxarifado"));
                    obj.setAlmoxarifado(a);
                    t.setTipoEntrada(rs.getString("tipo_entrada"));
                    obj.setTipoEntrada(t);
                    fp.setFormaPagamento(rs.getString("forma_pagamento"));
                    obj.setFormaPagamento(fp);
                    obj.setTotal(rs.getDouble("total"));
                    obj.setFrete(rs.getDouble("frete"));
                    obj.setIcmsSubst(rs.getDouble("icms_subst"));
                    obj.setOutraDespesa(rs.getDouble("outra_despesa"));
                    obj.setTotalGeral(rs.getDouble("total_geral"));
                    
                    lista.add(obj);
                }
            }
            return lista;
        } catch (Exception erro) {
            //retorna aviso de erro na pesquisa se exitir
            JOptionPane.showMessageDialog(null, "Erro :" + erro);
            return null;
        }
    }
}

6 Respostas

E

faz essa alteracao na passagem do parametro numNota e testa primeiro se o codigo
esta retornando valor informando o sql diretamente no bancos de dados antes de inserir
no codigo java.
E esse teu select nao esta no padrao de instrução sql, bota nesse padrão botando o apelidio abreviado para cada campo exemplo
select e.cod_empresa
inner join tb_empresas e

G

Senhores, não quero atrapalhar, mas será que o problema não e na logica?

if(rs.next() == false){
        JOptionPane.showMessageDialog(null, "Nenhum Registro Foi Encontrado Para Essa Pesquisa!");
    }else{
       // .....
    }

esse rs.next() , será que ele não acaba cancelando o 1° dado?

E

no caso ele tem que confirmar pelo banco se o select que ele passou realmente esta retornando algum valor
e para garantir que o código que vc falou não esta atrapalhando, ele pode testar o código sem o if e deixar só com

D

rs.next() posiciona o cursor do ResultSet no próximo registro, retornando verdadeiro caso o mesmo exista ou falso caso contrário. Como está sendo usado no if para verificar se há algo, o problema é exatamente esse, caso a consulta retorne apenas um registro. Se retornar mais de um, vão ser processados a partir do segundo.

...

while ( rs.next() ) {
    ...
    lista.add( obj );
}

return lista;

Crie a lista e a popule. Na hora que usar o método buscarCompraPorNota você verifica se a lista está vazia para mostrar o JOptionPane. Da forma que está fazendo, você está misturando responsabilidades. Esse método deve retornar o resultado da consulta, não apontar que não há registros, ainda mais que JOptionPane.showMessageDialog é bloqueante. Quem for usar o método que resolva isso. Outra coisa, você não está usando genéricos da forma apropriada para a lista. Provavelmente seu compilador deve estar te avisando isso e você está ignorando.

Seu código corrigido e aprimorado:

public List<Compra> buscarCompraPorNota(int numNota) throws SQLException {

    try {
    
        List<Compra> lista = new ArrayList<>();
        
        String sql = "select codigo_compra, num_nota, serie, dt_entrada, dt_emissao, fornecedor, empresa, "
                   + "almoxarifado, tipo_entrada, forma_pagamento, total, frete, icms_subst, outra_despesa, "
                   + "total_geral from tb_compras inner join tb_fornecedores on (cod_fornecedor = codigo_fornecedor) "
                   + "inner join tb_empresas on (cod_empresa = codigo_empresa) "
                   + "inner join tb_almoxarifados on (cod_almoxarifado = codigo_almoxarifado) "
                   + "inner join tb_tipos_entradas on (cod_tipo_entrada = codigo_tipo_entrada) "
                   + "inner join tb_formas_pagamentos on (cod_forma_pagamento = codigo_forma_pagamento) "
                   + where num_nota =+numNota;

        PreparedStatement stmt = con.prepareStatement(sql);
        stmt.setInt(1, numNota);
        ResultSet rs = stmt.executeQuery();
        
        while (rs.next()){
        
            Compra obj = new Compra();
            Fornecedor f = new Fornecedor();
            Empresa e = new Empresa();
            Almoxarifado a = new Almoxarifado();
            TipoEntrada t = new TipoEntrada();
            FormaPagamento fp = new FormaPagamento();
            
            obj.setCodigo(rs.getInt("codigo_compra"));
            obj.setNumNota(rs.getInt("num_nota"));
            obj.setSerie(rs.getInt("serie"));
            obj.setDtEntrada(rs.getDate("dt_entrada"));
            obj.setDtEmissao(rs.getDate("dt_emissao"));
            f.setNomeFornecedor(rs.getString("fornecedor"));
            obj.setFornecedor(f);
            e.setEmpresa(rs.getString("empresa"));
            obj.setEmpresa(e);
            a.setAlmoxarifado(rs.getString("almoxarifado"));
            obj.setAlmoxarifado(a);
            t.setTipoEntrada(rs.getString("tipo_entrada"));
            obj.setTipoEntrada(t);
            fp.setFormaPagamento(rs.getString("forma_pagamento"));
            obj.setFormaPagamento(fp);
            obj.setTotal(rs.getDouble("total"));
            obj.setFrete(rs.getDouble("frete"));
            obj.setIcmsSubst(rs.getDouble("icms_subst"));
            obj.setOutraDespesa(rs.getDouble("outra_despesa"));
            obj.setTotalGeral(rs.getDouble("total_geral"));
            
            lista.add(obj);
        }
        
        return lista;
        
    }
    
}

Agora, usando o método:

try {

    List<Compra> resultado = dao.buscarCompraPorNota( 10 );
    
    if ( resultado.isEmpty() ) {
        JOptionPane.showMessageDialog(null, "Nenhum Registro Foi Encontrado Para Essa Pesquisa!");
    } else {
        // processe a lista...
    }
    
} catch ( SQLException exc ) {
    JOptionPane.showMessageDialog( null, "Erro :" + exc );
}
M
Solucao aceita

obrigado, deu certo.

public List<Compra> buscarCompraPorNota(int numNota){
        try {
            //criando a lista.
            List<Compra> lista = new ArrayList<>();
            //comando sql para lista os dados.
            String sql = "select codigo_compra, num_nota, serie, dt_entrada, dt_emissao, fornecedor, empresa, "
                    + "almoxarifado, tipo_entrada, forma_pagamento, total, frete, icms_subst, outra_despesa, "
                    + "total_geral from tb_compras inner join tb_fornecedores on (cod_fornecedor = codigo_fornecedor) "
                    + "inner join tb_empresas on (cod_empresa = codigo_empresa) "
                    + "inner join tb_almoxarifados on (cod_almoxarifado = codigo_almoxarifado) "
                    + "inner join tb_tipos_entradas on (cod_tipo_entrada = codigo_tipo_entrada) "
                    + "inner join tb_formas_pagamentos on (cod_forma_pagamento = codigo_forma_pagamento) "
                    + "where num_nota = ?";

            PreparedStatement stmt = con.prepareStatement(sql);
            stmt.setInt(1, numNota);
            ResultSet rs = stmt.executeQuery();
            
            if(rs.next() == false){
                JOptionPane.showMessageDialog(null, "Nenhum Registro Foi Encontrado Para Essa Pesquisa!");
            }else{
                
                    Compra obj = new Compra();
                    Fornecedor f = new Fornecedor();
                    Empresa e = new Empresa();
                    Almoxarifado a = new Almoxarifado();
                    TipoEntrada t = new TipoEntrada();
                    FormaPagamento fp = new FormaPagamento();
                    
                    obj.setCodigo(rs.getInt("codigo_compra"));
                    obj.setNumNota(rs.getInt("num_nota"));
                    obj.setSerie(rs.getInt("serie"));
                    obj.setDtEntrada(rs.getDate("dt_entrada"));
                    obj.setDtEmissao(rs.getDate("dt_emissao"));
                    f.setNomeFornecedor(rs.getString("fornecedor"));
                    obj.setFornecedor(f);
                    e.setEmpresa(rs.getString("empresa"));
                    obj.setEmpresa(e);
                    a.setAlmoxarifado(rs.getString("almoxarifado"));
                    obj.setAlmoxarifado(a);
                    t.setTipoEntrada(rs.getString("tipo_entrada"));
                    obj.setTipoEntrada(t);
                    fp.setFormaPagamento(rs.getString("forma_pagamento"));
                    obj.setFormaPagamento(fp);
                    obj.setTotal(rs.getDouble("total"));
                    obj.setFrete(rs.getDouble("frete"));
                    obj.setIcmsSubst(rs.getDouble("icms_subst"));
                    obj.setOutraDespesa(rs.getDouble("outra_despesa"));
                    obj.setTotalGeral(rs.getDouble("total_geral"));
                    
                    lista.add(obj);
            }
            return lista;
        } catch (Exception erro) {
            //retorna aviso de erro na pesquisa se exitir
            JOptionPane.showMessageDialog(null, "Erro :" + erro);
            return null;
        }
    }
D

Ah eu não pensei na hora. Se sua consulta é pela chave primária, não faz sentido retornar uma lista.

Criado 30 de janeiro de 2026
Ultima resposta 3 de fev. de 2026
Respostas 6
Participantes 4