Erro ao acessar banco de dados Access

14 respostas
A

Olá galera, também estou iniciando em Java e estou com um probleminha. Quero montar uma tela de cadastro simples interligando com o Access, colocando eventos nos botões de Inserir, Alterar e outros. Mas meu sistema dá erro na Statement e não executa o evento quando clico no botão. Help!

Código

package BD;   
import java.awt.*;   
import java.awt.event.ActionEvent;   
import java.awt.event.ActionListener;   
import java.sql.*;   
  
import javax.swing.*;   
  
public class BotaoPainel extends JPanel{   
    private static final long serialVersionUID = 1L;   
    /**  
     * @param args  
     */   
    JButton btnConsultar,btnAdicionar,btnAlterar,btnLimpar,btnApagar;   
    private MontaTela campos;   
    private JTextArea saida;   
    private Connection conecta;   
       
    public BotaoPainel(Connection c, MontaTela s, JTextArea t){   
  
        setLayout(new GridLayout(1,5));   
           
        btnAdicionar = new JButton("Adicionar");   
        btnAdicionar.addActionListener(new ActionListener(){   
        public void actionPerformed(ActionEvent evt){   
            try{   
                Statement executaSQL = conecta.createStatement();   
                     
                if (!campos.tfData.getText().equals("") && !campos.tfNome.getText().equals("")){   
                    String query = "INSERT INTO Clientes(Data,Nome,RG,CPF,Endereço,Cidade,UF,CEP,Sexo)"+   
                            " VALUES ('"+campos.tfCodigo.getText()+"','"+campos.tfData.getText()+"','"+campos.tfNome.getText()+   
                            "','"+campos.tfRg.getText()+"','"+campos.tfCpf.getText()+"','"+campos.tfEndereco.getText()+   
                            "','"+campos.tfCidade.getText()+"','"+campos.tfUf.getText()+"','"+campos.tfCep.getText()+   
                            "','"+campos.rbMasculino.getText()+"','"+campos.rbFeminino.getText()+"')";   
                       
                    int result = executaSQL.executeUpdate(query);   
                       
                    if (result == 1){   
                        saida.append("Inserido com sucesso! \n");   
                        campos.tfData.setText("");   
                        campos.tfNome.setText("");   
                        campos.tfRg.setText("");   
                        campos.tfCpf.setText("");   
                        campos.tfEndereco.setText("");   
                        campos.tfCidade.setText("");   
                        campos.tfUf.setText("");   
                        campos.tfCep.setText("");   
                        campos.rbMasculino.setVisible(true);   
                        campos.rbFeminino.setVisible(true);   
                    }   
                    else{   
                        saida.append("Erro na inclusão! \n");   
                    }   
                }   
                else   
                    JOptionPane.showMessageDialog(null, "PREENCHA OS CAMPOS","Atenção",JOptionPane.ERROR_MESSAGE);   
                    executaSQL.close();   
            }   
            catch(SQLException sqlex){   
                sqlex.printStackTrace();   
                saida.append(sqlex.toString());   
            }   
        }   
        });   
           
        add(btnAdicionar);   
        btnConsultar = new JButton("Consultar");   
        add(btnConsultar);   
        btnAlterar = new JButton("Alterar");   
        add(btnAlterar);   
        btnApagar = new JButton("Apagar");   
        add(btnApagar);   
        btnLimpar = new JButton("Limpar");   
        add(btnLimpar);   
    }   
}  
package BD;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.*;

import javax.swing.*;

public class BotaoPainel extends JPanel{
	private static final long serialVersionUID = 1L;
	/**
	 * @param args
	 */
	JButton btnConsultar,btnAdicionar,btnAlterar,btnLimpar,btnApagar;
	private MontaTela campos;
	private JTextArea saida;
	private Connection conecta;
	
	public BotaoPainel(Connection c, MontaTela s, JTextArea t){

		setLayout(new GridLayout(1,5));
		
		btnAdicionar = new JButton("Adicionar");
		btnAdicionar.addActionListener(new ActionListener(){
		public void actionPerformed(ActionEvent evt){
			try{
				Statement executaSQL = conecta.createStatement();
				  
				if (!campos.tfData.getText().equals("") && !campos.tfNome.getText().equals("")){
					String query = "INSERT INTO Clientes(Data,Nome,RG,CPF,Endereço,Cidade,UF,CEP,Sexo)"+
							" VALUES ('"+campos.tfCodigo.getText()+"','"+campos.tfData.getText()+"','"+campos.tfNome.getText()+
							"','"+campos.tfRg.getText()+"','"+campos.tfCpf.getText()+"','"+campos.tfEndereco.getText()+
							"','"+campos.tfCidade.getText()+"','"+campos.tfUf.getText()+"','"+campos.tfCep.getText()+
							"','"+campos.rbMasculino.getText()+"','"+campos.rbFeminino.getText()+"')";
					
					int result = executaSQL.executeUpdate(query);
					
					if (result == 1){
						saida.append("Inserido com sucesso! \n");
						campos.tfData.setText("");
						campos.tfNome.setText("");
						campos.tfRg.setText("");
						campos.tfCpf.setText("");
						campos.tfEndereco.setText("");
						campos.tfCidade.setText("");
						campos.tfUf.setText("");
						campos.tfCep.setText("");
						campos.rbMasculino.setVisible(true);
						campos.rbFeminino.setVisible(true);
					}
					else{
						saida.append("Erro na inclusão! \n");
					}
				}
				else
					JOptionPane.showMessageDialog(null, "PREENCHA OS CAMPOS","Atenção",JOptionPane.ERROR_MESSAGE);
					executaSQL.close();
			}
			catch(SQLException sqlex){
				sqlex.printStackTrace();
				saida.append(sqlex.toString());
			}
		}
		});
		
		add(btnAdicionar);
		btnConsultar = new JButton("Consultar");
		add(btnConsultar);
		btnAlterar = new JButton("Alterar");
		add(btnAlterar);
		btnApagar = new JButton("Apagar");
		add(btnApagar);
		btnLimpar = new JButton("Limpar");
		add(btnLimpar);
	}
}

Erro:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at BD.BotaoPainel$1.actionPerformed(BotaoPainel.java:35)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:231
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:6289)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:6054)
at java.awt.Container.processEvent(Container.java:2041)
at java.awt.Component.dispatchEventImpl(Component.java:4652)
at java.awt.Container.dispatchEventImpl(Container.java:2099)
at java.awt.Component.dispatchEvent(Component.java:4482)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:423
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:416
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:247
at java.awt.Component.dispatchEvent(Component.java:4482)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644)
at java.awt.EventQueue.access$000(EventQueue.java:85)
at java.awt.EventQueue$1.run(EventQueue.java:603)
at java.awt.EventQueue$1.run(EventQueue.java:601)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:9
at java.awt.EventQueue$2.run(EventQueue.java:617)
at java.awt.EventQueue$2.run(EventQueue.java:615)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
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)

14 Respostas

mauricioadl

vc tem objetos nulos.

o conecta e o saida. de um new neles.

[]'s

A

Ok! mauricioadl, tentei dar um new neles, mas deu erro. Às vezes posso estar colocando em lugar errado, onde exatamente posso dar o new nesses objetos? rsrsrs

Att.

mauricioadl

acho q vc esta copiando isso de algum lugar, entao vou dar um chute supondo que vc saiba usar um construtor.

public BotaoPainel(Connection c, MontaTela s, JTextArea t){ saida = t; conecta = c;

[]'s

A

O colocar no inicio do construtor.

A

mauricioadl

Realmente, algumas partes copiei de outros exemplos, mas sempre tratando os erros e lendo o código para entender. Comecei agora a ver a parte de interface, métodos construtores e outros, confesso que há algumas linhas que ainda estou estudando para entender. Mas esse erro tá me encucando, todos os fóruns que olhei e vários exemplos, sempre é da mesma forma, com a mesma estrutura. Só que comigo, o sistema pára a execução na linha Statement executaSQL = conecta.creatStatemente();

public void actionPerformed(ActionEvent evt){ try{ Statement executaSQL = conecta.createStatement();

amunis999

Coloco no início, mas não funciona também, sempre pára na mesma linha indicada acima.

Toda ajuda será bem vinda!

mauricioadl

ele para prq o objeto conecta esta null vc precisa iniciar ele, provavelmente deve ter uma classe que vc faz a conexao com o banco. vc tem essa classe?

A

tenta isso, na linha 28 substitua conecta por c, e nas linhas 39,52,61 substitui saida por t… vê o que acontece .
Tenta substituir campos por s também.

A

Tenho sim, a classe Aplicativo é quem faz a conexão. Abaixo o código que faz isso:

try{ url = "jdbc:odbc:Clientes"; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conecta = DriverManager.getConnection(url); saida.append("Conexão efetuada com sucesso! \n"); } catch(ClassNotFoundException e){ saida.append("Não foi possível ser efetuada a conexão, classe não encontrada! \n"); } catch(SQLException d){ saida.append("Não foi possível ser efetuada a conexão com o Banco de Dados! \n"); }

aechiara

Augusto de Paula da uma olhada nas PreparedStatements (vários exemplos aqui no fórum http://www.guj.com.br/java/40126-exemplo-de-preparedstatement), para que vc não fique concatenando o seu SQL, como você está fazendo

o nosso amigo (mauricio) tem razão, em nenhum lugar você inicializou a conexão

da uma olhada aqui nessa thread que tem um exemplo http://www.guj.com.br/java/3873-driver-jdbc-p-access

mauricioadl

Augusto de Paula:
Tenho sim, a classe Aplicativo é quem faz a conexão. Abaixo o código que faz isso:

try{ url = "jdbc:odbc:Clientes"; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); conecta = DriverManager.getConnection(url); saida.append("Conexão efetuada com sucesso! \n"); } catch(ClassNotFoundException e){ saida.append("Não foi possível ser efetuada a conexão, classe não encontrada! \n"); } catch(SQLException d){ saida.append("Não foi possível ser efetuada a conexão com o Banco de Dados! \n"); }

pega esse conecta aqui e passa no contrutor da sua classe e la dentro vc atribui ele ao conecta lah de dentro, assim ele vai esta ativo.

outra coisa, seria bom vc seguir o conselho do aechiara, prq seu codigo esta cheio de erros basicos q vc vai resolver facilmente usando os links q ele te passou.

abração

A

Obrigado mauricioadl, problema da conexão resolvido. Agora está dando erro na estrutura condicional, ele não quer entrar nessa parte, rsrsrs:

int result = executaSQL.executeUpdate(query); 

if (result == 1){

Vou quebrando a cabeça aqui e tentar resolver. Peguei as dicas sim e com certeza vou dar uma olhada e estudar um pouco mais.

mauricioadl

nao entra prq so retorna 1 quando a sua instrucao retornar alguma coisa. eh um conceito mais avancado sobre jdbc e acho q nao eh o momento de vc pensar nisso.

nao precisa testar pra ver se retorna, basta vc tratar toda a sua instrucao no try e catch se nao der exception eh prq rodou normalmente. entendeu?

try {
// sua instrucao

catch()

{

// se nao cair aqui deu certo

}
A

OK! mauricioadl… vou esperar um pouco para ver essa parte. Usei apenas o try / catch… Não consegui ainda foi inserir o sexo através dos radiobutton, ele não reconhece a opção masculino/feminino quando clico em adicionar.

add(rbtnMasculino); rbtnMasculino.setBounds(95, 170, 100, 20); rbtnMasculino.setActionCommand("Masculino"); add(rbtnFeminino); rbtnFeminino.setBounds(200, 170, 100, 20); rbtnFeminino.setActionCommand("Feminino"); radioGroup = new ButtonGroup(); radioGroup.add(rbtnMasculino); radioGroup.add(rbtnFeminino);

Criei dois botões rbtnMasculino/rbtnFeminino, criei um ButtonGroup radioGroup para gerenciar os Buttons. Adicionei o método setActionCommand() para definir o dado de cada Button e no evento do botão btnAdicionar coloquei o radioGroup para ser inserido. Mas não insere.

mauricioadl

como esta o atributo do seu option masculino e feminino no banco?

booleano, inteiro, byte, etc???

Criado 14 de fevereiro de 2012
Ultima resposta 16 de fev. de 2012
Respostas 14
Participantes 4