identify NullPointerException

1

I'm being JSP, and during testing a DAO, I came up with a NullPointerException here. However, I can not figure out why.

I'm using PreparedStatement and pulling the "INSERT" constant, which I created, into a method. Here is the code:

private static final String INSERIR ="INSERT INTO produto (ds_tipo_produto, nm_produto, nr_quantidade,\"\r\n vl_preco, ds_tipo_negociacao) VALUES (? , ? , ? , ?, ?)";
private static final String ALTERAR ="UPDATE produto SET ds_tipo_produto =?, nm_produto =?, nr_quantidade=?,vl_preco=?, ds_tipo_negociacao=?) ";
private static final String EXCLUIR = "DELETE FROM produto WHERE id_produto = ?";
private static final String LISTAR_POR_CÓDIGO ="SELECT * FROM produto WHERE id_produto=?";
private static final String LISTAR_TUDO ="SELECT * FROM produto";

private static Connection conn ;
public produtoDAO() {   
    conn = ConexaoBD.getConnection();
}

public static void registrarItem(Produto p) {
    try {
        PreparedStatement ps = conn.prepareStatement(INSERIR);
        ps.setString(1, p.getTipoProduto());
        ps.setString(2, p.getNomeProduto());
        ps.setInt(3, p.getQtdProduto());
        ps.setDouble(4, p.getPreco());
        ps.setString(5, p.getTipoNegociacao());
        ps.executeUpdate();
        ps.close(); 
    }

And here's my test class:

public class teste {
    public static void main(String[] args) {
        Produto produto = new Produto();
        produto.setTipoProduto("tipo1");
        produto.setNomeProduto("item1");;
        produto.setQtdProduto(5);;
        produto.setPreco(10.00);;
        produto.setTipoNegociacao("Venda");
        produtoDAO.registrarItem(produto);

        //System.out.println(produto);
    }
}

What do you suggest?

    
asked by anonymous 31.08.2017 / 03:52

1 answer

0

Something tells me that the DAO class is called produtoDAO .

Based on this premise, in the main() method you do: produtoDAO.registrarItem(produto); . When doing this the static method registrarItem() is called.

Notice that no instance was created. This way the constructor is not called. So the line that initializes the conn attribute is not executed:

public produtoDAO() {   
    conn = ConexaoBD.getConnection();
}

So when the registrarItem() method is called the conn attribute will be null, resulting in a NullPointerException in line: PreparedStatement ps = conn.prepareStatement(INSERIR);

To solve: make an instance of class produtoDAO and use it. If you do not have any explicit reason for the registrarItem() method to be static, leave it as an instance (not aesthetic).

Ah, another thing: usually Java classes start with the uppercase letter. This is a convention. Do not produtoDAO . Make ProdutoDAO . This helps even people understand your code to help you. I think some people thought produtoDAO was a variable that pointed to an instance of produtoDAO just because this is a common practice: ProdutoDAO produtoDAO = new ProdutoDAO();

    
31.08.2017 / 11:54