Problemas com metodo alterar no Dao apostial Caelum fj21

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

[code]
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();
}[/code]

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

[code]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);
}

}[/code]

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?

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

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)

[code]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);
}

}[/code]

1 curtida

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

Abs

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

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

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

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

[]

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:

[code]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);
}

}[/code]

Servlet Alterar Produto:

[code]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);        
}[/code]

Alterar.jsp

[code]


Cadastro de Produtos


<%
Produto p = (Produto) request.getAttribute(“p”);
%>

Alterar Produto <%= p.getNome()%>






























Nome:
Descrição: <%= p.getDescricao()%>
CĂłdigo de Barras:
Categoria:
Valor:
Quantidade:
            </tr>
        </table>

    </form>
</body>
[/code]