Erro com java + postgreSQL

Meu codigo esta dando o seguinte erro

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at controle.ControleFornecedor.Primeiro(ControleFornecedor.java:63)
	at visao.FrmFornecedor.jButtonPrimeiroActionPerformed(FrmFornecedor.java:393)
	at visao.FrmFornecedor.access$600(FrmFornecedor.java:20)
	at visao.FrmFornecedor$5.actionPerformed(FrmFornecedor.java:143)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
	at java.awt.Component.processMouseEvent(Component.java:6533)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
	at java.awt.Component.processEvent(Component.java:6298)
	at java.awt.Container.processEvent(Container.java:2236)
	at java.awt.Component.dispatchEventImpl(Component.java:4889)
	at java.awt.Container.dispatchEventImpl(Container.java:2294)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
	at java.awt.Container.dispatchEventImpl(Container.java:2280)
	at java.awt.Window.dispatchEventImpl(Window.java:2746)
	at java.awt.Component.dispatchEvent(Component.java:4711)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
	at java.awt.EventQueue.access$500(EventQueue.java:97)
	at java.awt.EventQueue$3.run(EventQueue.java:709)
	at java.awt.EventQueue$3.run(EventQueue.java:703)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
	at java.awt.EventQueue$4.run(EventQueue.java:731)
	at java.awt.EventQueue$4.run(EventQueue.java:729)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
public ModeloFornecedor Ultimo (){
        conn.conexao();
        try {
            conn.executaSQL("select * from fornecedores inner join bairro on fornecedores.id_bairro=bairro.id_bairro "
            +"inner join cidade on bairro.id_cidade = cidade.id_cidade"
            +"inner join estados on cidade.id_estado=estados.id_estado"); 
            conn.rs.last();
            mod.setId(conn.rs.getInt("id_fornecedores"));
            mod.setNome(conn.rs.getString("nome_fornecedor"));
            mod.setEndereco(conn.rs.getString("endereco"));
            mod.setBairro(conn.rs.getString("nome_bairro"));
            mod.setCNPJ(conn.rs.getString("cnpj_fornecedor"));
            mod.setNome_bairro(conn.rs.getString("nomes_cidades"));
            mod.setSigla_estado(conn.rs.getString("sigla_estado"));
            
                    
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Erro ao buscar o primeiro!\nERRO:"+ex);
        }
        conn.desconecta();
        return mod;

Que está na linha 63 desta classe ControleFornecedor?

 63             conn.rs.first();
 64           mod.setId(conn.rs.getInt("id_fornecedor"));
 65           mod.setNome(conn.rs.getString("nome_fornecedor"));
 66         mod.setEndereco(conn.rs.getString("endereco"));
 67         mod.setBairro(conn.rs.getString("nome_bairro"));
            mod.setCNPJ(conn.rs.getString("cnpj_fornecedor"));
            mod.setNomeCidade(conn.rs.getString("nomes_cidades"));
            mod.setSigla_estado(conn.rs.getString("sigla_estado"));

sua conexao ta vazia/nao foi atribuido nada a essa variavel conn.

E por favor, toda vez que for postar códigos aqui ou erros, faz a formatação.

image

conn e a variável de conexão para conectar o banco, o certo seria quando eu chamasse o metedo “ultimo” pegasse o ultimo dado do banco.

ainda sou bastante leigo em java e postgresql.

faz assim e fala oq vai acontecer:

if(!conn.first){
   System.out.println("Não há dados");
} else {
    //pega os dados do banco.
}

apareceu a mensagem “Não há dados”

então não tem dado na tabela… vc ta tentando recuperar dados inexistentes

mas tem dados na tabela sim, aqui esta ela.

Faz o teste la no banco, tenta rodar essa query la:

select * from fornecedores inner join bairro on fornecedores.id_bairro=bairro.id_bairro inner join cidade on bairro.id_cidade = cidade.id_cidade inner join estados on cidade.id_estado=estados.id_estado

Provavelmente nao ta retornando dado nenhum

retornou a tabela normalmente.

Tá.

Isso aqui não é do mesmo trecho de codigo que vc enviou, manda o correto então

pertece sim. segue ele abaixo novamente. acabei de rodar aki e deu o mesmo erro.

conn.conexao();
try {

        conn.executaSQL("select * from fornecedores inner join bairro on fornecedores.id_bairro=bairro.id_bairro "
        +"inner join cidade on bairro.id_cidade = cidade.id_cidade"
        +"inner join estados on cidade.id_estado=estados.id_estado"); 
   
        
              
        
        
        
        conn.rs.first();
        mod.setId(conn.rs.getInt("id_fornecedor"));
        mod.setNome(conn.rs.getString("nome_fornecedor"));
        mod.setEndereco(conn.rs.getString("endereco"));
        mod.setBairro(conn.rs.getString("nome_bairro"));
        mod.setCNPJ(conn.rs.getString("cnpj_fornecedor"));
        mod.setNomeCidade(conn.rs.getString("nomes_cidades"));
        mod.setSigla_estado(conn.rs.getString("sigla_estado"));
        
                
    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "Erro ao buscar o primeiro!\nERRO:"+ex);
    }
    conn.desconecta();
    return mod;
}

é que no codigo q vc tinha enviado estava como conn.rs.last(); e no erro estava conn.rs.first();


Se no if(!conn.rs.first()){} retornou true, a indicação é que não há dados… Mesmo erro de nullPointer?

então e por que são dois botoes para setar o ultimo e o primeiro dado então são os mesmo códigos só muda o last e first mesmo.

sim mesmo erro do nullpointer
Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at controle.ControleFornecedor.Primeiro(ControleFornecedor.java:83)

O NullPointerException não tem nada a ver com o chamar do first ou o ter ou não ter dados na tabela.

Mostra a tua classe de Conexao (a da variavel conn). Aposto que conn.rs está a null

Não que nao tenha nada a ver, conn.rs estar null é uma possibilidade. Mas se ele não tivesse dados na tabela, retornaria o mesmo nullPointer do mesmo jeito

Retornaria um outro erro mas não um NullPointerException. Provavelmente seria uma SQLException

Vixi, nem lembro o retorno, mas faz sentido, é mais logico retornar o sqlEx mesmo