Problemas com metodo alterar no Dao apostial Caelum fj21

7 respostas
R

Boa Tarde implemente o seguinte Dao
package br.com.caelum.com.br;

package br.com.caelum.com.br;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class ContatoDao {
	private Connection con;

	public void adciona(Contato contato) throws SQLException {
		this.con = ConnectionFactory.getConnection();
		String sql = "insert into contatos(nome,email,endereco) values (?,?,?)";
		PreparedStatement stmt = con.prepareStatement(sql);
		stmt.setString(1, contato.getNome());
		stmt.setString(2, contato.getEmail());
		stmt.setString(3, contato.getEndereco());
		stmt.execute();
		stmt.close();
	}

	public void altera(Contato contato) throws SQLException {
		String sql = "update contatos set nome=?, email=?, endereco=? where id=?";
		PreparedStatement stmt = con.prepareStatement(sql);
		stmt.setString(1, contato.getNome());
		stmt.setString(2, contato.getEmail());
		stmt.setString(3, contato.getEndereco());
		stmt.setLong(4, contato.getId());
		stmt.execute();
		stmt.close();
	}

	public void remove(Contato contato) throws SQLException {
		PreparedStatement stmt = con
				.prepareStatement("delete from contatos where id=? ");
		stmt.setLong(1, contato.getId());
		stmt.execute();
		stmt.close();
	}

depois criei o codigo de teste para incluir que funcionou normalmente porem quando tentei alterar com o seguinte codigo:

package br.com.caelum.com.br;

import java.sql.SQLException;

public class TestaAltera {
	public static void main(String args[]) throws SQLException{
		Contato contato = new Contato();
		ContatoDao dao= new ContatoDao();
		contato.setEmail("alterandoemail");
		contato.setEndereco("enderecoalterado");
		contato.setNome("nomealterado");
                                 long par = 1;
		contato.setId(par);
		dao.altera(contato);
	}

}

recebo a seguinte mensagem de erro:

Exception in thread "main" java.lang.NullPointerException
at br.com.caelum.com.br.ContatoDao.altera(ContatoDao.java:23)
at br.com.caelum.com.br.TestaInsere.main(TestaInsere.java:16)

nao sei porque ele esta dizendo que esta tentando acessar objeto nulo

alguem poderia me ajudar?

7 Respostas

L

parece que contato.getNome() esta retornando null cara debuga aew pra ver

R

Entao olha so o codigo e a saida do alterar que refiz
ta tudo setado!!!

nome:nome_alterar
Endereco:endereo_alterar
Email:email_alterar
Id:1
Exception in thread "main" java.lang.NullPointerException
at br.com.caelum.com.br.ContatoDao.altera(ContatoDao.java:23)
at br.com.caelum.com.br.TestaAltera.main(TestaAltera.java:20)

package br.com.caelum.com.br;

import java.sql.SQLException;

public class TestaAltera {
	public static void main(String args[]) throws SQLException{
		Contato contato = new Contato();
		ContatoDao dao = new ContatoDao();
		contato.setEmail("email_alterar");
		contato.setEndereco("endereo_alterar");
		contato.setNome("nome_alterar");
		long par = 1;
		contato.setId(par);
		//*******testando se foi tudo setado***********
		System.out.println("nome:"+contato.getNome());
		System.out.println("Endereco:"+contato.getEndereco());
		System.out.println("Email:"+contato.getEmail());
		System.out.println("Id:"+contato.getId());
		//****************fim testando se foi setado******
		dao.altera(contato);
	}

}
F

Verifica se o seu PreparedStatement stmt não esta nulo…

Abs

R

Valeu, era isso mesmo esqueci de chamar o metodo estatica da ConnectionFactory, valeu!!!

B

Estou com o mesmo problema ele não altera … como você fez pra resolver o problema?

R

Coloque o que você fez, o código ai…

ai a gente ajuda, precisa ser mais específico na pergunta…

[]

B

Estou com um problema para implementar o método alterar no DAO, ele não atualiza os valores, dizendo que está null , pelo que percebi me parece que ele não está conseguindo pegar o id, porque quando setei os valores fixos ele funcionou normalmente ...

Arquivo DAO:

public void alterar(Produto prod){
    String sql= "UPDATE produto"
            +" SET nome = ?, descricao = ?, codBarras = ?, "
            + "categoria = ?, quantidade = ?, valor = ? "
            +"WHERE id = ?;";
    try{
        PreparedStatement stmt = con.prepareStatement(sql);

        stmt.setString(1, prod.getNome());
        stmt.setString(2, prod.getDescricao());
        stmt.setInt(3, prod.getCodBarras());
        stmt.setString(4, prod.getCategoria());
        stmt.setInt(5, prod.getQuantidade());
        stmt.setDouble(6, prod.getValor());
        stmt.setInt(7, prod.getId());

        //executando
        stmt.execute();
        stmt.close();
    }
    catch(SQLException e){
        throw new RuntimeException(e);
    }
}

Servlet Alterar Produto:

protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        Produto p  = new Produto();
        ProdutoDAO dao = new ProdutoDAO();
        p.setId(Integer.parseInt(request.getParameter("id")));
        p.setNome(request.getParameter("nome"));
        p.setDescricao(request.getParameter("descricao"));
        p.setCodBarras(Integer.parseInt(request.getParameter("codBarras")));
        p.setCategoria(request.getParameter("categoria"));
        p.setValor(Double.parseDouble(request.getParameter("valor")));
        p.setQuantidade(Integer.parseInt(request.getParameter("quantidade")));

        dao.alterar(p);

        RequestDispatcher rd = request.getRequestDispatcher("/alterar.jsp");
        rd.forward(request, response);        
    }

Alterar.jsp

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Cadastro de Produtos</title>
    </head>
    <body>
        <%
            Produto p = (Produto) request.getAttribute("p");
        %>
        <h1>Alterar Produto <%= p.getNome()%></h1>
        <form action="AlterarProduto" method="POST">
            <input name="id" value="<%= p.getId()%>" />
            <table>
                <tr>
                    <td>Nome:</td>
                    <td><input type="text" name="nome" value="<%= p.getNome()%>"/></td>
                </tr>
                <tr>
                    <td>Descrição:</td>
                    <td><textarea name="descricao"/><%= p.getDescricao()%></textarea></td>
                </tr>
                <tr>
                    <td>Código de Barras:</td>
                    <td><input type="text" name="codBarras" value="<%= p.getCodBarras()%>"/></td>
                </tr>
                <tr>
                    <td>Categoria:</td>
                    <td><input type="text" name="categoria" value="<%= p.getCategoria()%>"/></td>
                </tr>
                <tr>
                    <td>Valor:</td>
                    <td><input type="text" name="valor" value="<%= p.getValor()%>"/></td>
                </tr>
                <tr>
                    <td>Quantidade:</td>
                    <td><input type="text" name="quantidade" value="<%= p.getQuantidade()%>"/></td>
                </tr>
                <tr>
                    <td colspan="2" align="center"><input type="submit"/><td>

                </tr>
            </table>

        </form>
    </body>
</html>
Criado 18 de novembro de 2009
Ultima resposta 21 de mai. de 2014
Respostas 7
Participantes 4