NullPointerException

7 respostas
F

Galeraa to com um problema aqui que não consigo resolver, já revirei o código e não encontro… acho que é simples mais ainda nao estou encontrado. O programa roda belezinha faz todos os procedimentos grava o tudo que preciso no banco tudo ok, porém tenho um gravo em um arquivo de log os erros que ele me retorna, no output do netbeans nao retorna nada de erro porem no log sempre me retorna o seguinte:

25/10/2012 17:22.54 ERROR [Timer-2] ImportarRetorno:323 - Exception

java.lang.NullPointerException

at main.dao.exportacao.GenericDao.getStatement(GenericDao.java:49)

at main.dao.importacao.FinanceiroDao.save(FinanceiroDao.java:40)

at main.gerador.ImportarRetorno.gravaFinanceiro(ImportarRetorno.java:289)

at main.gerador.ImportarRetorno.run(ImportarRetorno.java:75)

at java.util.TimerThread.mainLoop(Timer.java:555)

at java.util.TimerThread.run(Timer.java:505)

Aonde possivelmente ta acontecendo o NullPointerExecption ja revirei todas essas classes

7 Respostas

S

Fabio Lacerda:
Galeraa to com um problema aqui que não consigo resolver, já revirei o código e não encontro… acho que é simples mais ainda nao estou encontrado. O programa roda belezinha faz todos os procedimentos grava o tudo que preciso no banco tudo ok, porém tenho um gravo em um arquivo de log os erros que ele me retorna, no output do netbeans nao retorna nada de erro porem no log sempre me retorna o seguinte:

25/10/2012 17:22.54 ERROR [Timer-2] ImportarRetorno:323 - Exception

java.lang.NullPointerException

at main.dao.exportacao.GenericDao.getStatement(GenericDao.java:49)

at main.dao.importacao.FinanceiroDao.save(FinanceiroDao.java:40)

at main.gerador.ImportarRetorno.gravaFinanceiro(ImportarRetorno.java:289)

at main.gerador.ImportarRetorno.run(ImportarRetorno.java:75)

at java.util.TimerThread.mainLoop(Timer.java:555)

at java.util.TimerThread.run(Timer.java:505)

Aonde possivelmente ta acontecendo o NullPointerExecption ja revirei todas essas classes

Não podemos ajuda-lo se você não postar o seu código.

F

ok, vamos la essa é a GenericDao

/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package main.dao.exportacao;
import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import main.dao.configuracao.ConfiguracaoDao;

import main.model.configuracao.Configuracao;

/**
*

  • @author Rodrigo
    */
    public abstract class GenericDao {

    private Connection cx;

    public boolean testarConexao() throws ClassNotFoundException, SQLException {
    
    connect();
    
    return cx != null;
    

    }

    private void connect() throws ClassNotFoundException, SQLException {
    
    if (cx == null) {
    
    Configuracao configuracao = ConfiguracaoDao.read();
    
    try {
    
    if (configuracao == null) {
    
    configuracao = ConfiguracaoDao.read();
    
    }
    
    Class.forName(configuracao.getDatabase().getDriverName());
    
    cx = DriverManager.getConnection(configuracao.getDatabase().getUrl(), configuracao.getDatabase().getUsername(), configuracao.getDatabase().getPassword());
    
    cx.setAutoCommit(false);
    
    } catch (SQLException ex) {
    
    throw ex;
    
    } catch (ClassNotFoundException ex) {
    
    throw ex;
    
    }
    
    }
    
    }
    
    protected PreparedStatement getStatement(String st) throws SQLException, ClassNotFoundException {
    
    return cx.prepareStatement(st) ;
    
    }
    
    public ResultSet executeQuery(String query, Object params) throws SQLException, ClassNotFoundException {
    
    PreparedStatement ps = getStatement(query);
    
    for (int i = 0; i < params.length; i++) {
    
    ps.setObject(i + 1, params[i]);
    
    }
    
    return ps.executeQuery();
    
    }
    
    public int getNextSequence(String generator) throws SQLException, ClassNotFoundException {
    
    ResultSet rs = executeQuery(select gen_id( + generator + , 1) ID from RDB$DATABASE);
    
    rs.next();
    
    return rs.getInt(ID);
    
    }
    
    public void startTransaction() throws SQLException, ClassNotFoundException {
    
    connect();
    
    }
    
    public void commitTransaction() throws SQLException {
    
    cx.commit();
    
    }
    
    public void rollbackTransaction() throws SQLException {
    
    cx.rollback();
    
    }
    
    }
    
F
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package main.dao.importacao;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.ParseException;
import main.dao.configuracao.ConfiguracaoDao;
import main.dao.exportacao.GenericDao;
import main.gerador.registros.retorno.LeituraArquivoRetorno;
import main.model.configuracao.Configuracao;
import main.model.importacao.CupomFiscal;
import main.model.importacao.Financeiro;
import org.apache.log4j.Logger;

/**
 *
 * @author Rodrigo
 */
public class FinanceiroDao extends GenericDao {

    private static final String SQL_INS = "insert into ALC_PARCELA "
            + "(PARCELAID, DOCTOID, PARCELA, LOCALIZACAO, GRUPOPORTADOR, "
            + "PORTADOR, VENCIMENTO, VALOR, NUMERO) "
            + "values (?, ?, ?, ?, ?, ?, ?, ?, ?)";
    
    private static final String SQLUPDATEDOCTO_STATUS1 = "UPDATE ALC_DOCTO SET STATUS = 1 "
            +                                           "where DOCTOID = ?";
    private static final String SQLUPDATEDOCTO_STATUS0 = "UPDATE ALC_DOCTO SET STATUS = 0 "
            +                                           "where DOCTOID = ?";
    
    

    public void save(Financeiro financeiro) throws ParseException, SQLException, ClassNotFoundException, Exception {
        
        if (!financeiro.getCondicaoPagamento().equals("V") && !financeiro.getCancelado().equals("C")){ 
            
            PreparedStatement ps = getStatement(SQL_INS);

            financeiro.setParcelaId(getNextSequence("GEN_ALC_PARCELA"));

            ps.setInt(1, financeiro.getParcelaId()); // PARCELAID
            ps.setInt(2, financeiro.getCupomFiscal().getCupom_id());      // DOCTOID
            ps.setInt(3, financeiro.getParcela() + 1);  // PARCELA - No kraken a primeira parecela é 1 e não 0
            ps.setString(4, "01");                      // LOCALIZACAO
            ps.setString(5, "LC");                      // GRUPOPORTADOR
            ps.setString(6, "000001");                  // GRUPOPORTADOR
            ps.setDate(7, new java.sql.Date(financeiro.getVencimento().getTime()));  // VENCIMENTO
            ps.setBigDecimal(8, financeiro.getValor());
            if (financeiro.getObservacao().trim().isEmpty()) {
                ps.setString(9, null);
            } else {
                ps.setString(9, financeiro.getObservacao().substring(0, 13));
            }
            ps.executeUpdate();
            ps.close();            
                    
           PreparedStatement psUpdatez = getStatement(SQLUPDATEDOCTO_STATUS0);//colocando 0 no status
           psUpdatez.setInt(1, financeiro.getCupomFiscal().getCupom_id());
           psUpdatez.execute();
           psUpdatez.close();

           PreparedStatement psUpdatea = getStatement(SQLUPDATEDOCTO_STATUS1);//colocando 1 no status
           psUpdatea.setInt(1, financeiro.getCupomFiscal().getCupom_id());
           psUpdatea.execute();
           psUpdatea.close();
            
            
                }
                
            }
               
}
F

Essa daqui é uma parte da classe ImportarRetorno peguei so a parte que faz o financeiro pois ela é um pouco grande

private boolean gravaFinanceiro(LeituraArquivoRetorno rcf) {
        boolean result = true;
        FinanceiroDao dao = new FinanceiroDao();
        ParametrosDao paramDao = new ParametrosDao();  
        try {            
            paramDao.startTransaction();
            Parametros param = paramDao.load();
            valorOriginalALC = param.getBloqueioAlmoxarifado();
            valorOriginalLIV = param.getBloqueioLivro();
            paramDao.mudaBloqueio("N", "N");
            paramDao.commitTransaction(); 
            
            for (Financeiro mra : rcf.getFinanceiros()) {
                if (mra != null){
                    dao.save(mra);
                }
            }
            dao.commitTransaction();
            
            
        } catch (ParseException ex) {
            log.error("ParseException", ex);
            mensagem = ex.getMessage();
            result = false;
            try {
                dao.rollbackTransaction();
            } catch (SQLException ex1) {
                log.error("SQLException", ex1);
            }
        } catch (SQLException ex) {
            log.error("SQLException", ex);
            mensagem = ex.getMessage();
            result = false;
            try {
                dao.rollbackTransaction();
            } catch (SQLException ex1) {
                log.error("SQLException", ex1);
            }
        } catch (ClassNotFoundException ex) {
            log.error("ClassNotFoundException", ex);
            mensagem = ex.getMessage();
            result = false;
            try {
                dao.rollbackTransaction();
            } catch (SQLException ex1) {
                log.error("SQLException", ex1);
            }
        } catch (Exception ex) {
            log.error("Exception", ex);
            mensagem = ex.getMessage();
            result = false;
//            if (rcf.getTotalRegistro13()>0){
//                try{
//                    dao.rollbackTransaction();
//                } catch (SQLException ex1) {
//                        log.error("SQLException", ex1);
//                    } 
//                }
        }
        
        //voltando o status de bloqueio
        try {
            paramDao.mudaBloqueio(valorOriginalALC, valorOriginalLIV);
            paramDao.commitTransaction();
        } catch (SQLException ex) {
             log.error("SQLException", ex);
        } catch (ClassNotFoundException ex) {
            log.error("ClassNotFoundException", ex);
            mensagem = ex.getMessage();
        }
            
        
        return result;
}
Ataxexe

Arrisco dizer que a variável cx está nula. Pode ser que o método connect não tenha sido chamado.

wiltonor

o erro está na linha dao.save(mra); da classe importa retorno, nesse ponto não há transação aberta, faltou um dao.startTransaction(); antes pois o paramDao.commitTransaction(); fechou a transação aberta por paramDao.startTransaction();

O Ataxexe acertou a causa, realmente é porque o cx é nulo, conforme explicação acima.

F

realmente o problema estava neste ponto muito obrigado Ataxexe e wiltonor me ajudaram muito mesmo :smiley:

Criado 25 de outubro de 2012
Ultima resposta 26 de out. de 2012
Respostas 7
Participantes 4