Não consigo alterar um registro

Olá, estou tentando fazer um cadastro. Consegui inserir e listar os contatos, agora não estou conseguindo alterar os contatos. Dá erro no SQL. Se alguém puder me ajudar. Colocarei meu código aqui:

AlterarContato.java

package Action;

import java.io.IOException;
import java.sql.Connection;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import Dao.FabricaConexao;
import Dao.JDBCContatoDao;
import Model.Contato;

public class AlterarContato extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public AlterarContato() {
        super();

    }

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

	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		String nome = request.getParameter("nome");
		String telefone = request.getParameter("telefone");
		String celular = request.getParameter("celular");
		String dataNascimentoSt = request.getParameter("dataNascimento");
		String endereco = request.getParameter("endereco");
		String cidade = request.getParameter("cidade");
		String estado = request.getParameter("estado");
				
		Date date = null;
		try {
			date = new SimpleDateFormat("dd/MM/yyyy").parse(dataNascimentoSt);
		} catch (ParseException e) {
			e.printStackTrace();
			throw new RuntimeException("Data Inválida!");
		}
		
		Contato novoContato = new Contato();
		novoContato.setNome(nome);
		novoContato.setTelefone(telefone);
		novoContato.setCelular(celular);
		novoContato.setDataNascimento(date);
		novoContato.setEndereco(endereco);
		novoContato.setCidade(cidade);
		novoContato.setEstado(estado);
				
		
		FabricaConexao fabrica = new FabricaConexao();
		Connection conexao = fabrica.fazConexao();
		
		JDBCContatoDao dao = new JDBCContatoDao(conexao);
		dao.Alterar(novoContato);
				
		fabrica.fecharConexao();

		
		System.out.println("Contato alterado");
	}

}

JDBCContatoDao.java

public void Alterar(Contato contato) {
		String comando = "UPDATE contato SET nome = ? , telefone = ? , celular = ?, dataNascimento = ? ,endereco = ?, cidade = ?, estado = ? WHERE codigo = ? ";	
		
		PreparedStatement p;
		
		try {
			p = this.conexao.prepareStatement(comando);
			p.setString(1, contato.getNome());
			p.setString(2, contato.getTelefone());
			p.setString(3, contato.getCelular());
			p.setDate(4, new java.sql.Date(contato.getDataNascimento()
					.getTime()));
			p.setString(5, contato.getEndereco());
			p.setString(6, contato.getCidade());
			p.setString(7, contato.getEstado());

			p.executeUpdate(comando);
			p.close();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		
	}

alterarContato.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Agenda - Editar Contato</title>
</head>
<body>
<form action="AlterarContato" method="post">
Codigo: <input type="text" name="codigo"><br>
Nome: <input type="text" name="nome"><br>
Telefone: <input type="text" name="telefone"><br>
Celular: <input type="text" name="celular"><br>
Data de Nascimento: <input type="text" name="dataNascimento"><br>
Endereço: <input type="text" name="endereco"><br>
Cidade: <input type="text" name="cidade"><br>
Estado: <input type="text" name="estado"><br>
<br>


<input type="submit" value="Salvar"></form>

</body>
</html>

Não estou conseguindo achar o erro.

Coloca a mensagem de erro que é mais fácil que ler todo seu código.

[]s

Falta declarar o parametro numero 8.

p.setInt(8, contato.getIdContato()); 

Mais ou menos isso ae…

Não sei como estão seus getters!!

xD~~

Olha o erro, depois que eu preencho e clico em salvar:

Fiz o que o altitdb falou e continuou dando o mesmo erro.

 p.executeUpdate();  

É assim, sem nenhum parâmetro…

Ok, parou de dar o erro, agora como eu faço para que ele leia o código que eu digitei. Imbuti no sql o código que eu queria alterar só pra testar e deu certo, agora preciso que ele leia o que eu digitar. Tenho que usar ResultSet?

String comando = "UPDATE contato SET nome = ? , telefone = ? , celular = ?, dataNascimento = ? ,endereco = ?, cidade = ?, estado = ? WHERE codigo = 12 ";	

Tal como já foi dito acima, o código será mais um parâmetro tal como os valores que queres alterar.

(...)  
         String comando = "UPDATE contato SET nome = ? , telefone = ? , celular = ?, dataNascimento = ? ,endereco = ?, cidade = ?, estado = ? WHERE codigo = ? ";      
           
         PreparedStatement p;  
           
         try {  
             p = this.conexao.prepareStatement(comando);  
             p.setString(1, contato.getNome());  
             p.setString(2, contato.getTelefone());  
             p.setString(3, contato.getCelular());  
             p.setDate(4, new java.sql.Date(contato.getDataNascimento().getTime()));  
             p.setString(5, contato.getEndereco());  
             p.setString(6, contato.getCidade());  
             p.setString(7, contato.getEstado());  
             p.setString(8, contato.getId());
             p.executeUpdate();  
(...)

Então, eu havia deixado desta maneira, mas os dados não estão sendo alterados no banco, e não acusa erro nenhum.

Obrigada pela ajuda pessoal, consegui resolver, o problema agora era na action, faltou passar o codigo para o request.