Erro JDBC

10 respostas
Thiago_de_Paula_Bese

Boa noite.

Criei uma classe generica para conexão e manipulação ao banco de dados(access). A classe ta compilando sem erros, porém criei uma Interface grafica no netbeans para testar a classe generica. Sendo assim, no metodo contrutor da classe de interface grafica inseri o seguinte codigo:
if (!BD.getConnection())
{
            JOptionPane.showMessageDialog(null, "Falha na conexão, o sistema será fechado!");
            System.exit(0);
}

Mas, ao executar essa classe, com apenas esse código, sao gerados erros.

segue os erros:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at BD.getConnection(BD.java:19)
        at Exemplo1303.<init>(Exemplo1303.java:10)
        at Exemplo1303$1.run(Exemplo1303.java:165)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Para ficar mais facil, postarei as 2 classes que fiz (a de interface nao fiz na unha, usei o netbeans)

*Classe Genérica*

import java.sql.*;
import javax.swing.JOptionPane;

public class BD
{
    public static Connection connection = null;
    public static Statement statement = null;
    public static ResultSet resultSet = null;
    public static final String DRIVER = "sun.jdbc.odbc.JdbcOdbcDriver";
    public static final String URL = "jdbc:odbc:meubd";

    //Método que faz a conexão com o banco de dados
    //retorna true se houver com sucesso, ou false em caso negativo
    public static boolean getConnection()
    {
        try
        {
            Class.forName(DRIVER);
            statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            System.out.println("Conectou...");
            return true;
        }
        catch(ClassNotFoundException erro)
        {
            JOptionPane.showMessageDialog(null, "Problema na conexão JDBC-ODBC!");
            return false;
        }
        catch(SQLException erro)
        {
            JOptionPane.showMessageDialog(null, "Problema na conexão com o banco de dados!");
            return false;
        }
    }

    //Fecha ResultSet, Statement e Connection
    public static void close()
    {
        closeResultSet();
        closeStatement();
        closeConnection();
    }

    private static void closeConnection()
    {
        try
        {
            connection.close();
            System.out.println("Desconectou...");
        }
        catch(SQLException erro)
        {
            
        }
    }

    private static void closeStatement()
    {
        try
        {
            statement.close();
        }
        catch(Exception e)
        {
           
        }
    }

    private static void closeResultSet()
    {
        try
        {
            resultSet.close();
        }
        catch(Exception e)
        {
            
        }
    }

    public static void setResultSet(String sql)
    {
        try
        {
            resultSet = statement.executeQuery(sql);
        }
        catch(SQLException erro)
        {
           
        }
    }

    //Executa um script SQL de atualização
    //Retorna um valor inteiro contendo a quantidade de linhas afetadas
    public static int runSQL(String sql)
    {
        int quant = 0;
        try
        {
            quant = statement.executeUpdate(sql);
        }
        catch(SQLException erro)
        {
            
        }
        return quant;
    }
}
*Interface Gráfica para testar a classe generica*
public Exemplo1303() {
        initComponents();

        if (!BD.getConnection()) // Inseri apenas o IF no metodo contrutor, gerando o erro acima
        {
            JOptionPane.showMessageDialog(null, "Falha na conexão, o sistema será fechado!");
            System.exit(0);
        }
}

Se possível, conto com a ajuda dos amigos.

Desde já, Grato!

10 Respostas

nel

Aposto que a sua variavél BD está nula, e ai NullPointerException.
Tenha certeza que esta variavél esteja inicializada :slight_smile:

Abraços.

Thiago_de_Paula_Bese

nel:
Aposto que a sua variavél BD está nula, e ai NullPointerException.
Tenha certeza que esta variavél esteja inicializada :slight_smile:

Abraços.

Vou ver aqui amigo. Obrigado.

Thiago_de_Paula_Bese

Amigo. Nao consegui resolver o problema. Se possível, peço ajuda. Obrigado

nel

Na realidade o BD é uma classe que utiliza um método estático, perfeito.
O stacktrace acusa a seguinte linha:

statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE)

Provavelmente, e muito provavelmente, o connection é uma variavél de valor nulo e está causando o erro.
Debug e confira isto.

Ou simplesmente adicione algo assim: System.out.println("Conexao: " + connection);
Só para confirmar se há algum valor nesta variavél.

Inicialize ela antes de utilizar.

Att,

Leonel

Thiago_de_Paula_Bese

Olá Gente. Achei o erro.

Segue o codigo:

//Método que faz a conexão com o banco de dados
    //retorna true se houver com sucesso, ou false em caso negativo
    public static boolean getConnection()
    {
        try
        {
            Class.forName(DRIVER);
            connection = DriverManager.getConnection(URL); // ----------------------------> Não tinha declarado esse cara aqui
            statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
            System.out.println("Conectou...");
            return true;
        }
        catch(ClassNotFoundException erro)
        {
            JOptionPane.showMessageDialog(null, "Problema na conexão JDBC-ODBC!");
            return false;
        }
        catch(SQLException erro)
        {
            JOptionPane.showMessageDialog(null, "Problema na conexão com o banco de dados!");
            return false;
        }
    }

Agradeço a Atenção de VocÊs.

Abraço

nel

Exato, ou seja, não havia inicializado a variavél! :slight_smile:
Agora, apenas adicione [Resolvido] ao lado do seu tópico ok?

Abraços!

Hebert_Coelho

Blz.

Coloca [Resolvido] no tópico para ajudar outras pessoas depois. [=

Thiago_de_Paula_Bese

Pessoal. Mais uma vez preciso da ajuda de voces:

Fiz essas funcoes aqui, para manipular os dados do meu banco numa janela Grafica

Segue:

private void btPrimeiroActionPerformed(java.awt.event.ActionEvent evt) {
        try
        {
            BD.resultSet.first();
            atualizaCampos();
        }
        catch (SQLException erro)
        {
            JOptionPane.showMessageDialog(null, "Erro na busca de dados!");
        }
    }

    private void btAnteriorActionPerformed(java.awt.event.ActionEvent evt) {
        try
        {
            BD.resultSet.previous();
            atualizaCampos();
        }
        catch(SQLException erro)
        {
            JOptionPane.showMessageDialog(null, "Erro na busca de dados!");
        }
    }

    private void btProximoActionPerformed(java.awt.event.ActionEvent evt) {
        try
        {
            BD.resultSet.next();
            atualizaCampos();
        }
        catch(SQLException erro)
        {
            JOptionPane.showMessageDialog(null, "Erro na busca de dados!");
        }
    }

    private void btUltimoActionPerformed(java.awt.event.ActionEvent evt) {
        try
        {
            BD.resultSet.last();
            atualizaCampos();
        }
        catch(SQLException erro)
        {
            JOptionPane.showMessageDialog(null, "Erro na busca de dados!");
        }
    }

    private void btMaisDezActionPerformed(java.awt.event.ActionEvent evt) {
        try
        {
            BD.resultSet.relative(10);
            atualizaCampos();
        }
        catch(SQLException erro)
        {
            JOptionPane.showMessageDialog(null, "Erro na busca de dados!");
        }
    }

    private void btMenosDezActionPerformed(java.awt.event.ActionEvent evt) {
        try
        {
            BD.resultSet.relative(-10);
            atualizaCampos();
        }
        catch(SQLException erro)
        {
            JOptionPane.showMessageDialog(null, "Erro na busca de dados!");
        }
    }

    public void atualizaCampos(){
        try
        {
            if(BD.resultSet.isAfterLast())
                BD.resultSet.last();
            if(BD.resultSet.isBeforeFirst())
                BD.resultSet.first();

            tfCod.setText(BD.resultSet.getString("CODIGO"));
        }
        catch(SQLException erro){}
    }

Segue o codigo de erro:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at Exemplo1303.btPrimeiroActionPerformed(Exemplo1303.java:186)
        at Exemplo1303.access$000(Exemplo1303.java:8)
        at Exemplo1303$1.actionPerformed(Exemplo1303.java:59)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
        at java.awt.Component.processMouseEvent(Component.java:6263)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
        at java.awt.Component.processEvent(Component.java:6028)
        at java.awt.Container.processEvent(Container.java:2041)
        at java.awt.Component.dispatchEventImpl(Component.java:4630)
        at java.awt.Container.dispatchEventImpl(Container.java:2099)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
        at java.awt.Container.dispatchEventImpl(Container.java:2085)
        at java.awt.Window.dispatchEventImpl(Window.java:2478)
        at java.awt.Component.dispatchEvent(Component.java:4460)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Se não for demais, peço a analise de vocês do forum. to quebrando a mente aqui com Java/Access…hehe

Brigadão

Thiago_de_Paula_Bese

Pessoal. Desculpas. Mais uma vez, codigo com faltas.hehe

public Exemplo1303() {
        initComponents();

        if (!BD.getConnection())
        {
            JOptionPane.showMessageDialog(null, "Falha na conexão, o sistema será fechado!");
            System.exit(0);
        }
        
        BD.setResultSet("select * from filmes"); //---------------------------------->Aqui o cara que faltava!

    }

Agradeço a Atenção e paciencia de todos vocês. Problema Resolvido
OBRIGADO.

Hebert_Coelho

Oq tem na linha at Exemplo1303.btPrimeiroActionPerformed(Exemplo1303.java:186):?:

Criado 13 de agosto de 2010
Ultima resposta 13 de ago. de 2010
Respostas 10
Participantes 3