Inserir dados no MySql pelo NetBeans

11 respostas
P

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

11 Respostas

pmlm

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

Para evitar esses (e outros) problemas, usa PreparedStatement

A

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

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

P

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

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

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!

P

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

pmlm

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

R

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);

}

}
Criado 13 de outubro de 2010
Ultima resposta 3 de mai. de 2012
Respostas 11
Participantes 5