Ajuda, Erro no value specified for parameter

Na classe DAO da o seguinte erro quando vou Alterar:

“No value specified for parameter 7”

codigo DAO:

[code]//ProdutoDAO.java
package Persistencia;

import Modelo.Produto;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
//import Modelo.Turma;

public class ProdutoDAO {

//Método incluir
public boolean incluir (Produto produto)throws Exception{
    //verifica se já existe um produto cadastrado
    if(this.consultar(produto)==true){
        return false; // se existir, retorna falso
    }
    else{ //se não existir, deixa cadastrar
        Connection conn = null;
        //objeto que executa um comando sql
        PreparedStatement stmt = null;
        //? significa um campo a ser preenchido
        String sql = "INSERT INTO produto VALUES (?,?,?,?,?,?)";
        conn = ConnectionFactory.getConnection();
        stmt = conn.prepareStatement(sql);
        stmt.setInt(1, produto.getCodigo());
        stmt.setInt(2, produto.getCodigo_fornecedor());
        stmt.setString(3, produto.getNome_produto());
        stmt.setInt(4, produto.getQuantidade_estoque());
        stmt.setDouble(5, produto.getValor_custo());
        stmt.setDouble(6, produto.getValor_venda());

        stmt.executeUpdate();
        stmt.close();
        ConnectionFactory.closeConnection(conn);
        return true; 
        //Cadastrou um novo produto
    } //fim else
} // fim do método incluir

public boolean consultar (Produto produto)throws Exception{
    String sql = "SELECT * FROM produto WHERE codigo = ?";
    Connection conn = ConnectionFactory.getConnection();
    PreparedStatement stmt = conn.prepareStatement(sql);
    stmt.setInt(1, produto.getCodigo());
    //armazena o resultado da query
    ResultSet rs = stmt.executeQuery();
    boolean produtoFoiEncontrado = rs.next();

    if (produtoFoiEncontrado == true){
        int codigo_fornecedor = rs.getInt("codigo_fornecedor");
        produto.setCodigo_fornecedor(codigo_fornecedor);
       // String nome_produto = rs.getString("nome_fornecedor");
    //    produto.setNome_produto(nome_produto);
        int quantidade_estoque = rs.getInt("quantidade_estoque");
        produto.setQuantidade_estoque(quantidade_estoque);
        Double valor_custo = rs.getDouble ("valor_custo");
        produto.setValor_custo(valor_custo);
         Double valor_venda = rs.getDouble ("valor_venda");
        produto.setValor_venda(valor_venda);
    }
    rs.close();
    stmt.close();
    ConnectionFactory.closeConnection(conn);
    if (produtoFoiEncontrado == true)
        return true;
    else
        return false;
}

public boolean alterar (Produto produto) throws Exception{
    String sqlSelect = "SELECT * FROM produto WHERE codigo = ?";
    Connection conn = ConnectionFactory.getConnection();
    PreparedStatement stmtSelect = conn.prepareStatement(sqlSelect);
    stmtSelect.setInt(1, produto.getCodigo());
    ResultSet rs = stmtSelect.executeQuery();
    boolean produtoExiste = rs.next();
    if (produtoExiste == true){

        String sqlUpdate = "UPDATE produto SET codigo = ?, codigo_fornecedor = ?, nome_produto = ?,  quantidade_estoque = ?, valor_custo = ?, valor_venda = ? WHERE codigo = ?";
        PreparedStatement stmtUpdate = conn.prepareStatement(sqlUpdate);

        stmtUpdate.setInt(1, produto.getCodigo());
        stmtUpdate.setInt(2, produto.getCodigo_fornecedor());
        stmtUpdate.setString(3, produto.getNome_produto());
        stmtUpdate.setInt(4, produto.getQuantidade_estoque());
        stmtUpdate.setDouble(5, produto.getValor_custo());
        stmtUpdate.setDouble(6, produto.getValor_venda());

        stmtUpdate.executeUpdate();
        stmtUpdate.close();
        stmtSelect.close();
        rs.close();
        ConnectionFactory.closeConnection(conn);
        return true;
    }
    else{
        stmtSelect.close();
        rs.close();
        ConnectionFactory.closeConnection(conn);
        return false;
    }

}
public boolean excluir (Produto produto)throws Exception{
    String sql = "DELETE FROM produto WHERE codigo = ?";
    Connection conn = ConnectionFactory.getConnection();
    PreparedStatement stmt = conn.prepareStatement(sql);
    stmt.setInt(1, produto.getCodigo());
    int numeroLinhasAfetadas = stmt.executeUpdate();
    stmt.close();
    ConnectionFactory.closeConnection(conn);
    if (numeroLinhasAfetadas > 0)
        return true;
    else
        return false;
}

}[/code]

Se alguém poder me ajudar, obrigado

kanyewest
Não sou expert em Java+DB mas a mensagem me parece razoavelmente clara: faltou você especificar um parâmetro na sua consulta. Veja:

String sqlUpdate = "UPDATE produto SET codigo = ?, codigo_fornecedor = ?, nome_produto = ?,  quantidade_estoque = ?, valor_custo = ?, valor_venda = ? WHERE codigo = ?";  

Você tem 7 pontos de interrogação, mas só preenche 6 deles:

stmtUpdate.setInt(1, produto.getCodigo()); stmtUpdate.setInt(2, produto.getCodigo_fornecedor()); stmtUpdate.setString(3, produto.getNome_produto()); stmtUpdate.setInt(4, produto.getQuantidade_estoque()); stmtUpdate.setDouble(5, produto.getValor_custo()); stmtUpdate.setDouble(6, produto.getValor_venda());

Deve estar faltando algo do tipo:

stmtUpdate.setInt(7, produto.getCodigo()); // 

Abraço.