Erro tentando acessar Banco de Dados

7 respostas
A

Pessoal estou utilizando Linux (Fedora) e como IDE o NetBeans juntamente com MySQL como banco de dados… quando vou tentar executar uma inclusão básica ele me retorna o seguinte erro…

Exception in thread "main" java.lang.NullPointerException at negocio.Instituicao.gravar(Instituicao.java:197) at negocio.testa.main(testa.java:44)

O que posso fazer para resolver esse erro??
Muito Obrigado

Alisson 8)

7 Respostas

Rodrigo_Carvalho_Aul

Sem saber o código fica dificil ajudar.

[]'s

E

procure testar entradas iguais a null, pois esse tipo de erro é um dos que demoram mais para se achar a fonte do problema.

if(nome == null){

enviar mensagem dizendo que nome não pode ser null

}
A

Aki está o código de minha classe de conexao com o banco

package negocio;
import java.sql.*;

public class BDConexao {
    private static Connection con;
    private static Statement stmt;
    private static ResultSet resultado;
    private static boolean status = false;
    
    /** Creates a new instance of BDConexao */
    public BDConexao() {
        inicializarConexaoBD();
    }
    
    public static void inicializarConexaoBD() {
        status = true;
        try {
            Class.forName("org.gjt.mm.mysql.Driver");
        }
        catch (ClassNotFoundException cn) {
            status = false;
        }
        
        try {
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/projexsol", "root", "");
            stmt = con.createStatement();
        }
        catch (SQLException se) {
            status = false;
        }
    }
     
    public static Statement getStatement() {
        return stmt;
    }
    
    public static boolean getStatus() {
        return status;
    }
    
    public static int obterUltimoCodigoGeradoTabela(String nomeTabela) {
        try {
            String csCodigoGerado = "SELECT LAST_INSERT_ID() from " + nomeTabela;
            resultado = stmt.executeQuery(csCodigoGerado);
            resultado.first();
            return (resultado.getInt(0));
        }
        catch (SQLException se) {
            return 0;
        }
    }
}

Não estou conseguindo entender o pq está dando erro…

oazuc

Alisson,

procure analisar exatamente o que está sendo passado para as linhas que retornaram o erro das classes Instituicao e testa.

Você está utilizando null de alguma maneira inválida.

O problema não é exatamente na classe de conexão com o banco.

Abraços.

_fs

O problema pode ser o resultset vazio. Tenta checar o conteudo dele antes de fazer qualquer outra manipulação com o mesmo.

cv1

<voz de mae chata>
Alisson, PELO AMOR DE DEUS, menino, tire esses statics dai! E nao ignore Exceptions! E para de concatenar strings pra montar SQL!
</voz de mae chata>

Como melhorar o codigo, de acordo com a mae chata:

  • Orientacao a Objetos tah aih pra ser usada. Nao faz sentido ter uma classe toda cheia de statics - ou vc voltou ao C? :slight_smile:

  • Use a clausula throws quando vc nao tem como tratar uma excecao de um jeito que mantenha a sua aplicacao num estado consistente (nesse caso, usar uma flag boolean pra indicar erro foi uma pessima ideia: como vc sabe qual foi o erro?!)

  • De uma olhada no JavaDoc da classe PreparedStatement. Usando ela, vc nao precisa concatenar Strings pra montar queries, o que quase sempre leva a problemas de seguranca nas aplicacoes.

Acho que eh isso :smiley:

Rafael_Steil

Lembrando que tem tutorial sobre quase tudo isso que o cv falou aqui no GUJ. :wink:

Rafael

Criado 21 de janeiro de 2004
Ultima resposta 21 de jan. de 2004
Respostas 7
Participantes 7