Estou tentando inserir dados no banco de dados(MySQL) através de um programa que estou fazendo no NetBeans(versão 6.9.1) mas não obtenho sucesso.A conexão com banco está ok, a tabela também está ok no MySql, eu até consigo fazer alguns selects utilizando a mesma tabela.O erro que aparece é o do catch: Erro ao inserir os dados
Agradeço que puder ajudar! Código:
try {
Stringsqlinsert="insert into produto("+"para,nomeproduto,peso,preco,"+"descrição,quantidade) values ("+novo_cod.getText()+","+novo_box.getSelectedItem()+"','"+novo_nome.getText()+"','"+novo_peso.getText()+","+novo_preco.getText()+","+novo_desc.getText()+"','"+novo_qtd.getText()+")";conecta_novo.statement.executeUpdate(sqlinsert);JOptionPane.showMessageDialog(null,"Dados inseridos com sucesso");//atualizar o resulsetconecta_novo.resultset=conecta_novo.statement.executeQuery("select* from produto");conecta_novo.resultset.first();//mostrar_dados();}catch(SQLExceptionerro){JOptionPane.showMessageDialog(null,"Erro ao inserir os dados");
Como nosso amigo falou acima, é bem melhor utilizar o PreparedStatement, eu sempre utilizei ele e nunca ocorreu erro de inserção comigo , vou refazer seu método como exemplo para você ver como funciona o PreparedStatement, como exemplo, vou utilizar uma classe de conexão que tenho aqui , só como exemplo…
publicvoidinserirNoBanco(intcod,StringnomeProduto,doublepeso,doublepreco,Stringdescricao,intquantidade)
{
Connectionconn=Conecao.getConexao(); // Uma instancia de MINHA classe de ConexãoStringsql="INSERT INTO produto(para,nomeproduto,peso,preco,descricao,quantidade) VALUES (?,?,?,?,?,?)";// UTILIZEI SEUS CAMPOS QUE PEGUEI NO//CÓDIGOPreparedStatementstmt=conn.PreparedStatement(sql); // AQUI ESTÁ O USO DO PreparedStatementstmt.setInt(1,cod); stmt.setString(2,nomeProdudo); stmt.seDouble(3,peso); //NESSA PARTE DO CÓDIGO, SETA-SE AS VARIÁVEIS QUE PASSA POR PAREMETRO NO stmt.setDouble(4,preco); //MÉTODO PARA O STMT QUE É DO TIPO PreparedStatementstmt.setString(5,descricao); stmt.setInt(6,quantidade);stmt.execute(); // Executa o PreparedStatement com o SQL já incluso e os valoes Setadosstmt.close(); // Fecha o PreparedStatement após a execução
}
Espero ter Ajudado!!!
leandro.alves
Se precisar concatenar Strings faça uso do [color=blue]StringBuilder[/color]. Abraço !
pmlm
No exemplo em causa, é exactamente igual usar String ou StringBuilder.
Automaticamente o compilador vai transformar em new StringBuilder().append("insert into produto(").append("para,nomeproduto,peso,preco,").append("descrição,quantidade) values (").append(novo_cod.getText()).append(",").append(......;
leandro.alves
No exemplo em causa, é exactamente igual usar String ou StringBuilder.
Automaticamente o compilador vai transformar em new StringBuilder().append("insert into produto(").append("para,nomeproduto,peso,preco,").append("descrição,quantidade) values (").append(novo_cod.getText()).append(",").append(......;
Concordo, citei de forma genéria para implementações futuras, em outra partes do fonte ou onde mais seja necessário, notei que o problema já estava resolvido com a utilização do PreparedStatement.
Só aproveitei a oportunidade para citar esta boa prática. Valeu !!
P
Petrucci
Muito obrigado a todos!
Mas eu ainda não funcionou, aquele código que eu tinha postado aqui estava dentro de um evento de um botão(ActionPerformed),
o código que o Anderson passou tem um método e esse método está gerando um erro se eu o colocar no lugar do código anterior,
então eu coloquei o método no final do código mas não consigo chamar o método dentro do evento do botão, como faço isso?
Valeu!!
A
Anderson_S
Qual método que tem no meu código que ta dando erro no seu ai??
esse código ai foi só um exemplo de como usar o PreparedStatemtent…
agora vc pega a lógica e se adapta ao seu??
uma pergunta… vc tem alguma classe que faz a conexão com o Banco?
P
Petrucci
Bom, aparecem inumeras linhas de erro, seguem as duas primeiras:
Exception in thread “AWT-EventQueue-0” java.lang.UnsupportedOperationException: Not yet implemented
at Conexao.Conexao.getConexao(Conexao.java:20)
Quanto a uma classe de conexão, tenho sim, pra fazer select funciona numa boa:
Pessoal, consegui resolver o problema e decidi postar o código correto e a solução:
try {
Stringsqlinsert="insert into produto("+"tipoprod,para,nomeproduto,peso,preco,"+"descrição,quantidade) values ("+novo_cod.getText()+"null,'"+novo_box.getSelectedItem()+"','"+novo_nome.getText()+"',"+novo_peso.getText()+","+novo_preco.getText()+",'"+novo_desc.getText()+"',"+novo_qtd.getText()+");";System.out.println(sqlinsert);// O segredo está nessa linha, isso faz com que a String que coném a query sql seja exibida no console caso haja erro, dessa maneira você pode ajustar a sintaxe e deixar da forma correta.conecta_novo.statement.executeUpdate(sqlinsert);JOptionPane.showMessageDialog(null,"Dados inseridos com sucesso");//zerar todos os camposnovo_box.setSelectedItem("");novo_nome.setText("");novo_peso.setText("");novo_preco.setText("");novo_desc.setText("");novo_qtd.setText("");
}catch(SQLException erro){ JOptionPane.showMessageDialog(null,“Erro ao inserir os dados”);
Aprendi esse “truque” com meu professor de Java e isso ajuda a resolver esses problemas de sintaxe com insert, update… etc.
Agradeço a ajuda de todos!!
pmlm
Podes então ensinar o teu professor que o PreparedStatement é um ‘truque’ bem melhor…
R
rob-tec
alguem por favor poderia me ajudar a colocar uma decisão antes de salvar exemplo deseja salvar os dados informados se sim salva se não volta a tela sem limpar os campos.