Eu tenho um for que percorre uma list e a cada laço ele faz uma inserção no banco, o problema é que a primeira inserção ele faz de boa, mas depois ele não da mais o execute, simplesmente não executa as inserções seguintes e também não retorna nenhum erro.
########################################################################################
Na teoria não tem problema nisso, já na prática, só vc e Deus sabem o código que foi escrito.
Posta código…Deve ser parâmetro do for…
Veja:
for(int i=0; i<jTable1.getRowCount(); i++){ //conta linhas da tabela
inseredados.setSetor((String) jTable1.getValueAt(i, 0));
StmDesc(inseredados); //Assim correto
} //Dentro do For
StmDesc(inseredados);//Assim não
Acho que é mais ou menos isso, dá uma olhada…
Achei ter postado o código, mas acabei colando um monte de “#” sem querer.
A seguir o código do insert:
public void setarProdutos(ModeloVenda1 mV1) {
conexao.conectar();
try {
PreparedStatement pst = conexao.con.prepareStatement("INSERT INTO venda_pro (id, id_produto, quantidade) SELECT MAX(id), ?, ? FROM venda_info");
pst.setInt(1, Integer.parseInt(mV1.getId_produto()));
pst.setString(2, mV1.getQuantidade());
pst.execute();
} catch(SQLException ex) {
a.setTitle("ERRO");
a.setHeaderText("Houve um erro ao setarProduto.\nERRO: " + ex);
a.show();
}
conexao.desconectar();
}
E o código que chama o método:
for(Vender v : dVender){
mV1.setId_produto(v.getId());
mV1.setQuantidade(v.getQuantidade());
controleV.setarProdutos(mV1);
}
experimenta usar executeUpdate() q é o recomendado e v se resolve.
Já tentei usar o executeUpdate(), mas não funciona, já ativei e desativei o commit e nada, já mudei a string sql, tentei passar os atributos concatenados direto na string. Eu já vi tudo que tinha na internet e não consigo resolver. O que me intriga é que está tudo organizado e o código está todo correto, mas de alguma forma ele só passa pelo execute uma única vez. Eu coloquei um System.out.println(“TESTE”); antes e depois do .execute(), a primeira vez ele imprime os dois, já as próximas repetições ele só imprime o que vem primeiro, o que vem depois não imprime. Isso significa que o .execute não está rodando, mas o foda é que não dá erro.
A list tem 3 itens.
Acrescentei a seguinte linha para ver o que estava acontecendo:
System.out.println("TESTE - 1");
pst.execute();
System.out.println("TESTE - 2");
A saída deveria ser assim:
TESTE - 1
TESTE - 2
TESTE - 1
TESTE - 2
TESTE - 1
TESTE - 2
Mas sai assim:
Ou seja, depois de passar pelo .execute() pela primeira vez ele simplesmente não passa mais por ele.
então o problema deve estar na lógica do seu código (n na pequena parte q vc postou), basicamente deveria dar erro, não dando, está tudo ocorrendo corretamente, oq quer dizer q sua lógica ta errada.
Coisa do capeta isso ai, cara.
O problema era na tabela. Eu estava inserindo esses dados em uma tabela de referência, ela tinha que ter o último id da tabela principal. O erro era que o id estava como primary key, ou seja, toda vez que ele tentava inserir o mesmo id, simplesmente não permitia.