Erro com Cadastro no Banco MySql [RESOLVIDO]

9 respostas
L

Olá.

Tenho um código que não está executando corretamente, ele não está carregando no banco de dados mysql porque está entrando na exceção. Favor verificar o código sabendo que coloquei somente os trechos que podem estar com erro. Obs.: O netbeans não acusa nada de erro nos programas, ele apenas entra na exceção do executeUpdate (primeiro trecho abaixo).
Se precisar, envio o código completo, mas acredito que com isso já é possível achar o erro.
Obrigado pela atenção.

################################################################
public class Conexao{
public boolean executeUpdate(String sql) {
		 boolean retorno = false;
		 try{
		   Statement s = con.createStatement();
		   if(s.executeUpdate(sql)>0) retorno = true;
		}catch(SQLException e){
                    System.out.println("** Exceção SQLException - 3**");
		}
		return retorno;
	  }
}
################################################################
public class CadMedico{
    private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt) {                                          
        
        Connection connection =null;
		Statement stmt = null;
		String URL = "jdbc:mysql://localhost:3306/trabalhogb";
        try	{
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        connection = DriverManager.getConnection(URL, "root", "pass");
        stmt = connection.createStatement();
        char sexo = 'M';
        String nome = txtNome.getText();
        int idade = Integer.parseInt(txtIdade.getText());
        if(cmbSexo.getSelectedIndex()==0) sexo='M';
        else {
            if(cmbSexo.getSelectedIndex()==1) sexo = 'F';
            else javax.swing.JOptionPane.showMessageDialog(null,"Escolha um sexo");
            }
        long crm = Long.parseLong(txtCRM.getText());
        Medico m = new Medico(nome, idade, sexo, crm);
        MedicoBD a = new MedicoBD();
            boolean ret = a.cadastrar(m);
            if(ret){
                javax.swing.JOptionPane.showMessageDialog(null, "Cadastrado com sucesso!");
                limparCampos();
            }else{
                javax.swing.JOptionPane.showMessageDialog(null, "Não cadastrou!");
            }
        }catch(NumberFormatException e){
            javax.swing.JOptionPane.showMessageDialog(null,"O valor digitado em campo de número não é número.");
        }catch(ClassNotFoundException e)	{
           javax.swing.JOptionPane.showMessageDialog(null,"Exceção: não encontrou a classe!");
        }
		catch(SQLException e){
            javax.swing.JOptionPane.showMessageDialog(null,"Exceção: banco de dados");
            System.out.println(e.getMessage());
        }
		catch(InstantiationException e){
            javax.swing.JOptionPane.showMessageDialog(null,"Exceção: localização do BD");
        }
		catch(IllegalAccessException e){
            javax.swing.JOptionPane.showMessageDialog(null,"Exceção: acesso ilegal");
        }finally {// FINALLY VAI AQUI PORQUE ELE Ã? OBRIGADO A FAZER O FECHAMENTO DO BANCO DE DADOS
         //fechar todas as conexões com o banco
		try {
            stmt.close();
            connection.close();
            }catch (SQLException e) {
              javax.swing.JOptionPane.showMessageDialog(null,"Exceção : não conseguiu fechar");
            }
        }
}
}
################################################################
public class MedicoBD{
    public boolean cadastrar (Medico m){
        String sql = "INSERT INTO medico (nome, idade, sexo, crm)";
        sql = sql + "VALUES('"+m.getNome()+"','";
        sql = sql + m.getIdade() + "','";
        sql = sql + m.getSexo() + "','";
        sql = sql + m.getCrm()+";";
        Conexao c = new Conexao ();
        c.openConnection();
        boolean ret = c.executeUpdate(sql);
        c.closeConnection();
        return ret;
    }
}

9 Respostas

tinorberto

Oi , aqui 2 coisas coloque o codigo entre as tags [code] e qual a exceção esta lançando?

L

Ah, blz, valeu ae. É que é o meu primeiro post aqui e ainda to meio viajando.
A exceção que ele está gerando é aquela

catch(SQLException e){ System.out.println("** Exceção SQLException - 3**");

wellsantos

Class.forName("com.mysql.jdbc.Driver").newInstance();Não se deve chamar newInstance(). Deixa sem.

Class.forName("com.mysql.jdbc.Driver");
Paezani

Bom Lisossomo, dei uma olhada no seu código e talvez seja que a sua String sql que faz o insert esteja toda junto quando vc colocou ela na linha de baixo…
Está assim:

String sql = "INSERT INTO medico (nome, idade, sexo, crm)";   
        sql = sql + "VALUES('"+m.getNome()+"','";

Tenta assim:

String sql = "INSERT INTO medico (nome, idade, sexo, crm) ";   
        sql = sql + " VALUES('"+m.getNome()+"',' "; ....

E se possível para verificar qual o erro que está acontecendo, em vez daquela mensagem , coloque e.getMessage();

wellsantos

Caso não resolva, remova o try catch e poste a mensagem da SQLException pra gente ver.

L

Ao invés de colocar o print aquele editado, coloquei print e.getMessage() da exceção como deu a dica o Paezani e saiu isso:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '‘441122’ at line 1

Obs.: eu alterei lá colocando os espaços também como sugeriu o Paezani e deu esse erro. Obs. O número 441122 foi o número que eu tentei cadastrar como CRM.

Paezani

Bom esta mensagem é de erro no sql!

Estava faltando fechar u último aspas simples e o parenteses do values…Tenta assim:

String sql = "INSERT INTO medico (nome, idade, sexo, crm) ";   
          sql = sql + " VALUES('"+m.getNome()+"' , '";   
          sql = sql + m.getIdade() + "' , '";   
          sql = sql + m.getSexo() + "' , '";   
          sql = sql + m.getCrm()+"') ";

Posta aí o resultado

abraço

L

Cara, não acredito… Fiquei 2 dias em cima desse código e não tinha achado esse erro. Tinha que fechar o parênteses, hehehe.
Quando a gente escreve o código é difícil achar o próprio erro, hehe.
Muito obrigado.

Paezani

É colega já passei por problemas como esse… mas eu aconselho vc fazer a consulta, insert, update testando em uma ferramenta da base de dados, fica mais fácil achar erros no sql se houverem. E pode ver que a consulta deu erro próximo ao valor do crm, onde fechava o parenteses.
Bom se deu certo, blza…

abraço

Criado 17 de junho de 2009
Ultima resposta 18 de jun. de 2009
Respostas 9
Participantes 4