[RESOLVIDO] Erro ao usar Insert JDBC

5 respostas
I

Eu tenho um banco de dados criado e fiz a conexão usando o driver JDBC. O problema é que quando uso o comando Insert, ele lança um SQLException. A conexão vai bem, é só o comando mesmo que da erro.

Classe de conexão
public class DbCon
{

    private Connection con;

    public DbCon()
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            this.con = DriverManager.getConnection(
                    "jdbc:mysql://localhost/reposicaopecas?user=root&password=123");
        } catch (ClassNotFoundException ex)
        {
            javax.swing.JOptionPane.showMessageDialog(null, "Constr ClassNotFoundException");
        } catch (SQLException ex)
        {
            javax.swing.JOptionPane.showMessageDialog(null, "Constr SQLException");
        }
    }

    public void cadastrarFornecedor(String nf, String razs, String cidade, String uf,
            String cep, String endereco, int numero, String bairro, String cnpj, String ie,
            String e1, String e2, String t1, String t2)
    {
        try
        {            
            String com = "INSERT INTO fornecedor (nome_fantasia, razao_social, cidade, uf, cep,"
                + " endereco, numero, bairro, cnpj, inscricao_estadual, email1, email2, telefone1, telefone2)"
                + " VALUES(" + nf + ", " + razs + ", " + cidade + ", " + uf + ", " + cep + ", " + endereco
                + ", " + numero + ", " + bairro + ", " + cnpj + ", " + ie + ", " + e1 + ", " + e2 + ", "
                + t1 + ", " + t2 + ")";
            Statement stm = this.con.createStatement();
            int rs = stm.executeUpdate(com);
            stm.close();
            this.con.close();
            javax.swing.JOptionPane.showMessageDialog(null, "Cadastro efetuado com sucesso");
        }catch(SQLException ex)
        {
            javax.swing.JOptionPane.showMessageDialog(null, "cadastrarFornec SQLException");
        }
    }
}
public void mouseClicked(MouseEvent e)
        {
            DbCon c = new DbCon();
            int num = Integer.parseInt(txtNum.getText());

            c.cadastrarFornecedor(txtNFant.getText(),
                                  txtRazSoc.getText(),
                                  txtCidade.getText(),
                                  cbUf.getEditor().getItem().toString(),
                                  ftxtCep.getText(),
                                  txtEndereco.getText(),
                                  num,
                                  txtBairro.getText(),
                                  ftxtCnpj.getText(),
                                  ftxtIE.getText(),
                                  txtEmail1.getText(),
                                  txtEmail2.getText(),
                                  ftxtTel1.getText(),
                                  ftxtTel2.getText());
        }

O que eu to fazendo de errado? =/

5 Respostas

isaiaspf

Iskifi,

Pra solucionar o problema, seria interessante que você colocasse qual SQLException que tá sendo lançada. Mas antes de fazer isso, tenta fazer a busca usando PreparedStatement. Outra coisa, em vez de passar todos os valores por parâmetro no método, passa somente um objeto (Fornecedor no teu caso).
public void cadastrarFornecedor(Fornecedor fornecedor)
StringBuffer sql = new StringBuffer();  
sql.append("INSERT INTO fornecedor(nome_fantasia, razao_social, cidade, uf, cep,");  
sql.append(" endereco, numero, bairro, cnpj, inscricao_estadual, email1, email2,");  
sql.append(" telefone1, telefone2)");  
sql.append(" VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?)");  
  
PreparedStatement stmt = con.prepareStatement(sql.toString());  
stmt.setObject(1, fornecedor.getNomeFantasia());  
stmt.setObject(2, fornecedor.getRazaoSocial());  
stmt.setObject(3, fornecedor.getCidade());  
stmt.setObject(4, fornecedor.getUf());  
stmt.setObject(5, fornecedor.getCep());  
stmt.setObject(6, fornecedor.getEndereco());  
stmt.setObject(7, fornecedor.getNumero());  
stmt.setObject(8, fornecedor.getBairro());  
stmt.setObject(9, fornecedor.getCnpj());  
stmt.setObject(10, fornecedor.getInscricaoEstadual());  
stmt.setObject(11, fornecedor.getEmail1());  
stmt.setObject(12, fornecedor.getEmail2());  
stmt.setObject(13, fornecedor.getTelefone1());  
stmt.setObject(14, fornecedor.getTelefone2());
stmt.execute();  
stmt.close();  
  
con.close();
Abraço.
mateuscs

isaiaspf

Aproveitando o embalo, organize melhor seu código.
Coloque sua String em uma String final por exemplo;

private final static String ADICIONAR_CONTATO = "INSERT INTO CONTATOS (NOME, EMAIL, ENDERECO) VALUES (?,?,?)";
isaiaspf

Quem está com o problema é o Iskifi. E de qualquer forma, eu não faria dessa forma que você sugeriu.

I

Opa, valeu pela ajuda isaiaspf. Funcionou agora. Só uma coisa, o netbeans da uma sugestão de mudar StringBuffer pra StringBuilder. Me parece a mesma coisa. Tem alguma vantagem?

mateuscs, valeu também, ficou organizado usando sua dica ^^

isaiaspf

Tanto faz qual você usa, não vai ter diferença no desempenho.

Mais detalhes:
Diferença entre StringBuffer e StringBuilder

Criado 20 de julho de 2011
Ultima resposta 20 de jul. de 2011
Respostas 5
Participantes 3