Re: Erro ao Inserir dados no MYSQL

3 respostas
Rafael_Steil

Quando vc for postar codigo, coloque-o entre as tags [ code] e [ /code], assim ele ficará endentado.

Em relacao a sua duvida: a sua classe Conectabd tem uma falha grave: se algo acontece de errado, vc permite que ela continue executando. Dessa forma, mesmo que o driver nao seja encontrado ou a senha do banco de dados esteja incorreta, vc ira retornar o “conn”, soh que ele vai estar null. E como vc nao esta fazendo a logica de verificacao para ver se de fato a conexao foi aberta, o seu programa quebra.

O correto nesse caso eh: caso algo na Conectabd falhe, nao deixe o programa continuar a execucao.

Rafael

3 Respostas

Rafael_Steil

Try-catch eh para tratar erros sim, mas o que vc fez foi ignorar os erros, ao inves de lidar com ele.
Quando uma exception ocorre no sistema, a exeucacao para no ponto do erro, caso nao haja um tratamento. Porem, quando vc faz

try {
    // codigo
}
catch (Exception e) {
    System.out.println("ocorreu um erro");
}

// resto do programa

voce estara apenas mostrando na tela a mensgem “ocorreu um erro”, porem, como vc nao “relanca” a exception, ou nao faz algum outro tipo de logica, a execucao ira continuar, indo para o “resto do programa”.

O correto, no teu caso, seria fazer assim:

...
public Connection getConnection() {
    Connection conn = null;

    try {
        Class.forName(...);
        conn = DriverManager.getConnection(....);
    }
    catch (Exception e) {
        e.printStackTrace();

        // 1) Simplesmente mostre a msg de erro e depois trate a conexao nula em outro lugar:

        System.out.println("Erro: " + e):
        
        // 2) OU vc pode relancar a exception, fazendo com que o programa - ou ao menos o metodo atual - pare de executar:
        throw new RuntimeException(e);
    }

    // Se chegou aqui, e se vc fez o passo 2 ao inves do 1, voce tera uma conexao valida
    return conn;
}

ai, no teu metodo inserir(), vc faz assim:

...
Connection conn = getConnection();

// O correto: verificar se vc tem uma conxao mesmo
if (conn != null) {
    // trabalhe com ela
}
else {
    // nao tenho uma conexao.. mostrar msg erro etc
}
...

Rafael

V

Falai moçada!!
Bem eu criei duas classes, uma para conectar ao banco outra para inserir os dados. São elas:

*********** CLASSE Conectabd *****************

import.....    
public class Conectabd {
    public Connection conn = null;
    public Connection getConnection() {
        try {
            Class.forName ("com.mysql.jdbc.Driver");
      }
      catch(java.lang.ClassNotFoundException e) {
         System.err.print("ClassNotFoundException:");
         System.err.println(e.getMessage());
      };
        try {
            Connection conn = DriverManager.getConnection("jdbc:mysql://200.000.000.0/DB_TESTE?user=admmysql&password=bl1kout");
        } catch (SQLException ex) {
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
        }
        return conn;
    }
}

*********** CLASSE Insredados *****************

import ...
    
public class Inseredados extends Conectabd{
    //ESTE METODO ABAIXO É CHAMADO EM OUTRA CLASSE
    public void inserir(String esp, String unid,String dat) { 
        try {
            getConnection();
            Statement stm = conn.createStatement();
            stm.execute("INSERT INTO sementes (especie,un_medida,data_cadastro) VALUES ("+esp+","+unid+","+dat+")");
        } catch (SQLException ex) {
            System.out.println("SQLException: " + ex.getMessage());
            System.out.println("SQLState: " + ex.getSQLState());
            System.out.println("VendorError: " + ex.getErrorCode());
         }                     
  }
}

MAS APRESENTA O SEGUINTE ERRO AO RODAR:

DESDE JÁ OBRIGADO

V

Mas o Try e o Cath não é justamente para isso???

Criado 8 de julho de 2005
Ultima resposta 8 de jul. de 2005
Respostas 3
Participantes 2