Carinha, aparentemente você está recebendo um “NaN” como parâmetro e repassando ele para o update, e isto está dando pau.
Com o que você está apresentando não dá pra resolver seu problema. Mas veja aí (isso é um PreparedStatement, né) como está a passagem dos parâmetros que estão dando NaN, e descubra porque os disgramado fidumaégua dos parâmetros estão virando NaN…
Eu utilizo uma query passando parametros para ela para poder dar saída nos produtos do estoque, só que quando eu vou dar saída em todos os produtos que consta em estoque ele dá esse erro, quando na realidade ele deveria ficar com a quantidade zero, não sei o que está acontecendo, porque este infeliz está recebendo NaN, segue abaixo o código utilizado:
Double total = 0.0;
Integer estoque;
int index = masterTable.getSelectedRow();
br.com.ControleDeEstoqueSicredi.bean.Saidaproduto s = list.get(masterTable.convertRowIndexToModel(index));
Collection<br.com.ControleDeEstoqueSicredi.bean.Detalhesaida> ds = s.getDetalhesaidaCollection();
for (Detalhesaida detalhesaida : ds) {
if (detalhesaida.getQuantidadedetalhesaida() == null) {
detalhesaida.setQuantidadedetalhesaida(1);
}
detalhesaida.setTotaldetalhesaida(detalhesaida.getValorunitariodetalhesaida() * detalhesaida.getQuantidadedetalhesaida());
total = total + detalhesaida.getTotaldetalhesaida();
produtoQuery = entityManager.createNamedQuery("Produto.findByCodigoproduto");
produtoQuery.setParameter("codigoproduto", detalhesaida.getDetalhesaidaPK().getCodigoproduto());
List<Produto> data = produtoQuery.getResultList();
if(detalhesaida.getQuantidadedetalhesaida()>data.get(0).getEstoque()){
JOptionPane.showMessageDialog(null, "A Quantidade Solicitada Não Existe Em Estoque");
detalhesaida.setQuantidadedetalhesaida(null);
}
else{
data.get(0).setEstoque(data.get(0).getEstoque()-detalhesaida.getQuantidadedetalhesaida());
data.get(0).setCustomedioproduto((data.get(0).getTotal()-detalhesaida.getTotaldetalhesaida())/data.get(0).getEstoque());
data.get(0).setTotal(data.get(0).getCustomedioproduto()*data.get(0).getEstoque());
}
}
jTextField10.setText(String.valueOf(total));
De uma olhada se dá para clarear alguma coisa? E se pode me ajudar, valeu obrigado.
Então recomendo que você coloque todas essas chamadas pinheirinho de forma indireta, que assim você consegue inspecionar a variável.
Aliás, recomendo a todos esta prática.
else {
Produto p = data.get(0);
X estoque = p.getEstoque();
X quantidadeSaida = detalhesaida.getQuantidaddetalhesaida();
p.setEstoque(estoque - quantidadeSaida);
...
}
Isto tem algumas vantagens: 1) você não fica chamando o getter todo o tempo e ganha uns pontinhos de performance
2) Você consegue colocar um breakpoint no meio da sentença e validar o conteúdo da variável durante a depuração.
3) Seu código fica mais limpo e legível.
Você está recebendo um NaN que vem de algum lugar, e está tentando colocar ele no SQL.
NaN = Not a Number. Dá uma debugada no seu código pra ver onde acontece isso.