Inserir dados no MySql pelo NetBeans

Iae galera!

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 {

            String sqlinsert = "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 resulset
            conecta_novo.resultset = conecta_novo.statement.executeQuery("select* from produto");
            conecta_novo.resultset.first();
            //mostrar_dados();
        }catch(SQLException erro){
            JOptionPane.showMessageDialog(null,"Erro ao inserir os dados");

Many Thanks!!

Se isso são campos de texto, faltam as ’

Para evitar esses (e outros) problemas, usa PreparedStatement

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…

public void inserirNoBanco(int cod, String nomeProduto, double peso, double preco, String descricao, int quantidade)
{
	Connection conn = Conecao.getConexao(); // Uma instancia de MINHA classe de   Conexão
               String sql = "INSERT INTO produto(para,nomeproduto,peso,preco,descricao,quantidade) VALUES (?,?,?,?,?,?)";// UTILIZEI SEUS CAMPOS QUE PEGUEI NO
                                                                                                                                                                                  // CÓDIGO
              PreparedStatement stmt = conn.PreparedStatement(sql); // AQUI ESTÁ O USO DO PreparedStatement
              stmt.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 PreparedStatement
              stmt.setString(5,descricao);                                         
              stmt.setInt(6,quantidade);
              stmt.execute(); // Executa o PreparedStatement com o SQL já incluso e os valoes Setados
             stmt.close(); // Fecha o PreparedStatement após a execução
}

Espero ter Ajudado!!!

Se precisar concatenar Strings faça uso do [color=blue]StringBuilder[/color]. Abraço !

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(......;

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(......;[/quote]

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 !! :smiley:

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!!

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?

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:

package Conexao;

import java.sql.;
import javax.swing.
;

public class Conexao

{

public static com.mysql.jdbc.PreparedStatement PreparedStatement(String sql) {
    throw new UnsupportedOperationException("Not yet implemented");
}

public static Conexao getConexao() {
    throw new UnsupportedOperationException("Not yet implemented");
}

final private String driver =“org.gjt.mm.mysql.Driver”;
final private String url=“jdbc:mysql://localhost/petshop”;
final private String usuario=“root”;
final private String senha=“040104”;
public Connection conexao;
public Statement statement;
public ResultSet resultset;

public boolean conecta() throws SQLException
{
boolean result = true;
try
{
Class.forName(driver);
conexao = DriverManager.getConnection(url, usuario, senha);
// JOptionPane.showMessageDialog(null, “conectou”);
}
catch(ClassNotFoundException Driver)
{
JOptionPane.showMessageDialog(null, “driver não localizado”);
result = false;
}
return result;
}

public void executesql(String sql) throws SQLException
{
try
{
statement = conexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
resultset = statement.executeQuery(sql);
}
catch(SQLException sqlex)
{
JOptionPane.showMessageDialog(null, “Não foi possível conectar”+sqlex);
}
}
}

Obrigado!

Pessoal, consegui resolver o problema e decidi postar o código correto e a solução:

try {

            String sqlinsert = "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 campos
            novo_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!!

Podes então ensinar o teu professor que o PreparedStatement é um ‘truque’ bem melhor…

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.

private void BsalvarActionPerformed(java.awt.event.ActionEvent evt) {
// Botao salva funcionario
try{
dao.ClienteDAO cdao = new ClienteDAO();
modelo.Cliente c = new Cliente();
c.setNome(jTNome.getText());
c.setSobrenome(jTSobrenome.getText());
c.setCpf(jFCpf.getText());
c.setRg(jFRg.getText());
c.setEndereco(jTEndereco.getText());
c.setCep(jFCep.getText());
c.setCidade(jTCidade.getText());
c.setBairro(jTBairro.getText());
c.setUf(jCUf.getToolTipText());
c.setTelefone(jFTelefone.getText());
c.setCelular(jFCelular.getText());
c.setNumero(jTNumero.getText());
c.setEstcivil(jCEstcivil.getActionCommand());
c.setReferencia(jTReferencia.getText());
c.setCadastro(JfCadastro.getText());
c.setNasc(jFNasc.getText());
c.setComplemento(jTComplemento.getText());
c.setEmail(jTEmail.getText());
cdao.incluir©;
} catch (Exception ex) {
Logger.getLogger(FFuncionario.class.getName()).log(Level.SEVERE, null, ex);
}
}