Ajuda, Erro no value specified for parameter

1 resposta
K

Na classe DAO da o seguinte erro quando vou Alterar:

"No value specified for parameter 7"

codigo DAO:

//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;
    }

}

Se alguém poder me ajudar, obrigado

1 Resposta

TerraSkilll

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.

Criado 16 de outubro de 2013
Ultima resposta 17 de out. de 2013
Respostas 1
Participantes 2