Não consigo inserir dados no meu banco em HSQLDB

Bom dia pessoal, estou com o seguinte problema:
estou tentando criar um programa básico de cadastro de clientes com interface gráfica feita no netbeans, primeiramente fiz e não usei banco de dados nenhum e deu certo, então resolvi implementar o banco de dados HSQLDB em modo Standalone para esta aplicação simples.
Eu consegui conectar o programa ao banco de dados, mas quando tento cadastrar o usuário, ele apresenta o seguinte erro:

Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException
at comercialsimples.TelaCadastroCliente.GravarActionPerformed(TelaCadastroCliente.java:345)
at comercialsimples.TelaCadastroCliente.access$300(TelaCadastroCliente.java:17)
at comercialsimples.TelaCadastroCliente$4.actionPerformed(TelaCadastroCliente.java:288)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6505)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:688)
at java.awt.EventQueue$3.run(EventQueue.java:686)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:702)
at java.awt.EventQueue$4.run(EventQueue.java:700)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:699)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

a seguir, o código de cadastro do usuário:

package comercialsimples;

import Classes.Cliente;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Conexão {
        Statement stmt = null;
        ResultSet result;
        Connection c;
        String aux;

        public void inserir(Cliente client){
            try {
            c = DriverManager.getConnection("jdbc:hsqldb:file:testdb", "sa", "");
                stmt = c.createStatement();
                aux = client.getNome();
                stmt.execute("INSERT INTO USUARIOS (nome) VALUES ('" + aux + "')");
    //            stmt.execute("CREATE TABLE Usuarios (nome VARCHAR(100) NOT NULL);");
                stmt.executeUpdate("shutdown");
                c.commit();
                stmt.close();
            c.close();
            } catch (SQLException ex) {
                Logger.getLogger(ComercialSimples.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
}

[EDIT]

Galera, fiz um método de pesquisa só pra testar e deu o mesmo erro em conexão, então o problema se encontra em conexão, a seguir código atualizado:

package comercialsimples;

import Classes.Cliente;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

public class Conexão {
        Statement stmt;
        ResultSet result;
        Connection c;
        String aux;
    private ResultSet res;

        public void inserir(Cliente client){
            try {
            c = DriverManager.getConnection("jdbc:hsqldb:file:testdb", "sa", "");
                stmt = c.createStatement();
                aux = client.getNome(); 
                stmt.execute("INSERT INTO USUARIOS (nome) VALUES ('" + aux + "')");
    //            stmt.execute("CREATE TABLE Usuarios (nome VARCHAR(100) NOT NULL);");
                stmt.executeUpdate("shutdown");
                c.commit();
                stmt.close();
            c.close();
            } catch (SQLException ex) {
                Logger.getLogger(ComercialSimples.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        public void pesquisar() throws SQLException{
            c = DriverManager.getConnection("jdbc:hsqldb:file:testdb", "sa", "");
            stmt = c.createStatement();
            stmt.executeQuery("SELECT * FROM USUARIOS"); 
                res = stmt.getResultSet(); 
                while(res.next()){ 
                    System.out.println(res.getString("firstname")); 
                } 
            stmt.executeUpdate("shutdown");
            c.commit();
            stmt.close();
            c.close();
        }
}

O erro é um NullPointerException nessa classe TelaCadastroCliente.java e nessa linha: :345

Veja o que está nulo, e tente corrigir

Provavelmente falta o Class.ForName na sua conexão.

Você pode criar um método para conexão, assim não tem que reescrever o código diversas vezes:

public static Connection getConnection(){ try { Class.forName("com.mysql.jdbc.Driver"); //Essa Linha aqui. return DriverManager.getConnection("jdbc:mysql://localhost/fj21", "root", ""); } catch (SQLException e) { throw new RuntimeException(e); } }

Depois, nos seus método, basta utilizar:

c = SuaClasseDeConexao.getConnection();

ps: depois que estiver familiarizado com isso, use o search do guj e procure por PreparedStatement . Tem diversos tópicos ensinando como e porquê utiliza-los.

@igor_ks: justamente igor, nesta linha de código, há um chamado pro método inserir da classe Conexão e eu procurei nesta classe se havia algo nulo e não consegui perceber, por isso gostaria da ajuda de vocês do fórum para que eu possa corrigir o problema;

@ErickRAR: Eu fiz o que você sugeriu e continua o mesmo erro, procurei em todo o código de conexão com o BD por algo nulo sendo enviado mas não achei, então estou num mato sem cachorro.

[EDIT]
Pessoal, como já disse implementei um teste de pesquisa apenas para ver se o banco esta funcionando e no editor do banco de dados cadastrei um nome na tabela USUARIOS, então eu chamei o metodo de pesquisa na tela de teste, onde nesta tela eu tenho apenas um botão com o nome teste e ao clicar neste botão ele faz uma pesquisa pré-configurada com a seguinte Query: “SELECT * FROM usuarios” e uso um resultset para receber o resultado, após receber este resultado eu mando o resultset printar o que há nele no console, mas ao invés de printar ele retorna com o mesmo erro, de quando eu fui inserir: NullPointerException
O código de pesquisa é este:

        public void pesquisar() throws SQLException{
            c = getConnection();
            stmt = c.createStatement();
            stmt.executeQuery("SELECT * FROM USUARIOS"); 
                res = stmt.getResultSet(); 
                while(res.next()){ 
                    System.out.println(res.getString("firstname")); 
                } 
            stmt.executeUpdate("SHUTDOWN");
            c.commit();
            stmt.close();
            c.close();
        }

e está contido na classe conexão que eu já mostrei no post anterior.

Olha o seu getConnection. A sintaxe correta é:

DriverManager.getConnection("jdbc:SEU_BANCO://ENDERECO_DO_BANCO/NOME_DA_BASE", "USUARIO", "SENHA");

No seu está file:testdb ao invés do endereço/nome_da_base.

@KarlosKatu, vc não acha que seria este Resultset que está retornando nulo?

@ErickRAR: Desculpa Erick, esqueci de dizer que meu banco de dados está em modo StandAlone, o que significa que eu utilizo um arquivo para salvar os dados, não um server, por isso essa configuração file:testdb;

@ragnarok: Não, pq quando eu usei o Editor do BD, eu criei um nome para usuario que como padrão está “karlos”, que é o que eu adicionei no editor e eu pesquiso por ele, então ele deveria retornar algo, a menos que eu esteja utilizando o ResultSet de forma errada e não consiga retirar o valor dele, mas não sendo isso, acho que ele recebe valor sim.

Tenta fazer o seguinte: Coloca um print em cada execução e veja até onde o print vai aparecer e poste aqui

Estranho, eu coloquei JOptionPane em todas as execuções e quando eu aperto no botão teste, não aparece nenhuma janela, é como se o erro impedisse tudo.
Aqui esta como ficou o código teste de pesquisa:

        public void pesquisar() throws SQLException{
            JOptionPane.showMessageDialog(null, "Conectado!");
            c = getConnection();
            JOptionPane.showMessageDialog(null, "Conectado!");
            stmt = c.createStatement();
            JOptionPane.showMessageDialog(null, "Statement Criado!");
            stmt.executeQuery("SELECT * FROM USUARIOS"); 
            JOptionPane.showMessageDialog(null, "Query sendo executada!");
            res = stmt.getResultSet(); 
            JOptionPane.showMessageDialog(null, "ResultSet!");
            while(res.next()){ 
                JOptionPane.showMessageDialog(null, "Inicio do While!");
                System.out.println(res.getString("firstname")); 
            } 
            JOptionPane.showMessageDialog(null, "Fim do While!");
            stmt.executeUpdate("SHUTDOWN");
            JOptionPane.showMessageDialog(null, "Shutdown!");
            c.commit();
            JOptionPane.showMessageDialog(null, "Commit!");
            stmt.close();
            JOptionPane.showMessageDialog(null, "Statement fechado!");
            c.close();
            JOptionPane.showMessageDialog(null, "Conexão encerrada!");
        }

[EDIT]
Inclusive acabei de tentar com o println e não funcionou do mesmo jeito, não sei o que pode ser e cada vez que clico no botão o erro repete.

estranho, tenta colocar um try e catch ou invés de usar o Throws pra ver se funciona.

Já fiz isso @ragnarok, mas deu a mesma coisa, não sei mais o que fazer :confused:

Cara, andei pesquisando sobre o seu problema, o NullPointException acontece quando algo recebe o valor nulo, então você tem que procurar onde se encontra o erro esse valor nulo e como você já disse que o erro estava em conexão, então comece por ai, fica a dica.

Eu olhei em todo o código e parece estar tudo nos conformes, por favor gente ajuda ai, to precisando dessa força.

Cara, olha isso que eu encontrei, tenta fazer no teu código pra ver se funciona:
http://www.guj.com.br/java/127672-awt-eventqueue-0-javalangnullpointerexception-como-resolver

O arquivo está no diretório certo?
Crie um diretório banco apenas para teste.

@ragnarok: Eu coloquei o static em todos os statement, connection e resultset, mas continua o erro de NullPointException

@ErickRAR: Eu fiz isso e continuou o erro, mas eu acho q ele reconhece o banco, até porque eu coloquei pra ele criar uma tabela assim q iniciar o programa e como a tabela já estava criada ai aparece avisando que a tabela já foi criada o que mostra que o banco está funcionando o problema está no código e só pra constar eu já retirei essa codificação pra criar uma nova tabela ao iniciar o programa, era só pra teste mesmo.

Então tenta da uma olhada nisso pra ver se resolve o seu problema:
http://javafree.uol.com.br/topic-886587-javalangNullPointerException.html

@ragnarok: Desculpa a ignorância, mas eu não sei como fazer um debug no Netbeans e também não sei como popular a minha conexão pelo statement e pelo ResultSet, você poderia me explicar melhor?

[EDIT]: Ah ta, debug é o mesmo que depurar, eu fiz sim o debug e deu tudo certo, falou que foi construido com sucesso!
Mas quanto ao popular as outras coisas, continuo sem saber.

Cara, popular é encher essas variáveis com algum valor, valor este que é adicionado a o ResultSet e ao Statement, então pelo que eu li no link que te mandei, você deve colocar os valores padrões neles.

Qual é o valor padrão deles?