Problema ao Inserir

16 respostas
D

Boa noite pessoal!!

Estou com problemas ao tentar inserir no BD os dados informados na aplicação…

public void inserirContato(){
				try{	
					String SQL = "INSERT INTO contatos Cod_Contato, Nome_Contato,Email_Contato," +
					"Aniv_Contato,Idade_Contato,Tel1_Contato,Tel2_Contato,Obs_Contato) Values ('" +
					contCod.getText() + "','" +
					contNome.getText() + "','" +
					contEmail.getText() + "','" +
					contAniv.getText() + "','" +
					contIdade.getText() + "','" +
					contTel1.getText() + "','" +
					contTel2.getText() + "','" +
					contObs.getText() + "')";
					MeuState.executeUpdate(SQL);
					JOptionPane.showMessageDialog(null, "Gravação Realizada com Sucesso!");

				}
				catch(SQLException ex){
					if(ex.getMessage().equals("General error"))
						JOptionPane.showMessageDialog(null, "Filme já Cadastrado");
					else
						JOptionPane.showMessageDialog(null, "Data inválida");
				}
			}
			public void actionPerformed(ActionEvent e) {
				if(e.getSource() == contCadastrar){
					inserirContato();
				}
                                                }

O erro que está aparecendo é o seguinte:

[color=red]Exception in thread AWT-EventQueue-0 java.lang.NullPointerException

at visao.ContatosVisao$BancoContatos.inserirContato(ContatosVisao.java:266)

at visao.ContatosVisao$BancoContatos.actionPerformed(ContatosVisao.java:280)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)[/color]

Alguém sabe o que ocorre??
Obrigada…!!!

16 Respostas

rafaelglauber
MeuState.executeUpdate(SQL);

vc instanciou o objeto MeuState aonde?

S

Existe um objeto do seu codigo q esta nulo.

Posta mais um pedaço da classe ConstatosVisao.java pra gente ve.

Valeu.

D
rafaelglauber:
MeuState.executeUpdate(SQL);

vc instanciou o objeto MeuState aonde?

Na classe BancoContatos:

public class BancoContatos implements ActionListener{
			String url = "jdbc:odbc:Agenda";
			
			ResultSet rs;
			Statement MeuState;
			public BancoContatos(){
				String url = "jdbc:odbc:Agenda";
				
				try {
					Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
					Connection MinhaConexao = DriverManager.getConnection(url);
					MeuState = MinhaConexao.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
					rs = MeuState.executeQuery("SELECT * FROM contatos");
					rs.first();

				} catch (ClassNotFoundException e) {
					
					System.out.println("Diver JDBC-ODBC não encontrado!");
				}
				catch(SQLException ex){
					System.out.println("Problemas na conexão com a fonte de dados");
				}
				
				

			}
Dentro dessa classe tem o método inserirContato() que eu mandei na msgm anterior....
wamarra
Tente o seguinte:
public void inserirContato(){   
    try{       
        String SQL = "INSERT INTO contatos (Cod_Contato, Nome_Contato,Email_Contato,Aniv_Contato,Idade_Contato,Tel1_Contato,Tel2_Contato,Obs_Contato) Values ('" +   
        contCod.getText() + "','" +   
        contNome.getText() + "','" +   
        contEmail.getText() + "','" +   
        contAniv.getText() + "','" +   
        contIdade.getText() + "','" +   
        contTel1.getText() + "','" +   
        contTel2.getText() + "','" +   
        contObs.getText() + "')";   
        MeuState.executeUpdate(SQL);   
        JOptionPane.showMessageDialog(null, "Gravação Realizada com Sucesso!");   
  
    }   
    catch(SQLException ex){   
        if(ex.getMessage().equals("General error"))   
            JOptionPane.showMessageDialog(null, "Filme já Cadastrado");   
        else   
            JOptionPane.showMessageDialog(null, "Data inválida");   
    }   
}   
public void actionPerformed(ActionEvent e) {   
    if(e.getSource() == contCadastrar){   
        inserirContato();   
    }   
}

A verdade é que vc esqueceu de abrir o parentese das colunas.
T+

D

COloquei o parentese…

Mas ainda  o seguinte erro

[color=red]Exception in thread AWT-EventQueue-0 java.lang.NullPointerException

at visao.ContatosVisao$BancoContatos.inserirContato(ContatosVisao.java:265)

at visao.ContatosVisao$BancoContatos.actionPerformed(ContatosVisao.java:279)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)[/color]

:frowning:

wamarra

olá dina,

O contCadastrar é um objeto ou um campo?
e Onde está declarado?

D

É um JButton…

Está declarado na classe ContatosVisao

A classe BancoContatos (onde trata o evento) é uma classe interna de ContatosVisao…

OBS.: Eu imprimi a String SQL e apareceu todos os dados corretamente…

Alguma idéia do que pode estar gerando o erro??

ramilani12

Bom vamos lá:

Dina poderia explicar o prq da sua classe que se conecta com banco de dados implementa ActionListener?

Ao invés de usar Statement utilize PreparedStatement alem de ser mais rapido ao Statement evite SQLInjection e nao se preocupe com as ’ aspas ’ o PreparedStatement faz isso para vc.

De uma lida em PreparedStatement : http://java.sun.com/j2se/1.5.0/docs/api/java/sql/PreparedStatement.html

D

É…
Acho que não tem mto sentido a classe implementar ActionListener…
:-o

Mudarei isso… Mas primeiro queria ver “ele” funcionando…

Mas… isso não causaria todo esse erro, causaria?

Valeu pela dica do PreparedStatement, lerei o link que vc mandou…

wamarra
Já tentou fazer a inserção direto do evento:
private void contCadastrar(java.awt.event.ActionEvent evt) {                                   
       try {   
           Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");   
           String url = "jdbc:odbc:Agenda";   
           String usuario = "";   
           String senha = ""; 
           String SQL = "INSERT INTO contatos (Cod_Contato, Nome_Contato, Email_Contato, Aniv_Contato, Idade_Contato, Tel1_Contato, Tel2_Contato, Obs_Contato) Values ('" +     
           contCod.getText() + "','" +     
           contNome.getText() + "','" +     
           contEmail.getText() + "','" +     
           contAniv.getText() + "','" +     
           contIdade.getText() + "','" +     
           contTel1.getText() + "','" +     
           contTel2.getText() + "','" +     
           contObs.getText() + "')";
           Connection MinhaConexao;   
           MinhaConexao = DriverManager.getConnection(url,usuario,senha);   
           Statement MeuState = MinhaConexao.createStatement();   
           ResultSet rs = MeuState.executeQuery(SQL);
           MinhaConexao.close();   
       }catch (ClassNotFoundException e){     
               JOptionPane.showMessageDialog(null,"Falha na conexão com o banco de dados \n" + e.getMessage()) ;     
               e.printStackTrace();     
       }catch (SQLException e ) {     
               JOptionPane.showMessageDialog(null,"Erro ao incluir registro\n" + e.getMessage()) ;     
               e.printStackTrace();     
       }   
         
}
ramilani12

dina:
É…
Acho que não tem mto sentido a classe implementar ActionListener…
:-o

Mudarei isso… Mas primeiro queria ver “ele” funcionando…

Mas… isso não causaria todo esse erro, causaria?

Valeu pela dica do PreparedStatement, lerei o link que vc mandou…

não causaria nenhum problema , foi por curiosidade mesmo :roll:
Sobre seu problema todos JTextField retornaram algo? ou seja caso o contCod.getText() estiver vazio qual seria o tratamento?

wamarra

Ops.: esqueci de fechar o evento, faltou uma }

T+

D

Wesley Marra:
Já tentou fazer a inserção direto do evento

Acabei de tentar… e continua dando erro…

ramilani12:
Sobre seu problema todos JTextField retornaram algo?

Sim todos retornam algo…

Me desculpem por todo esse trabalho que eu estou dando…
:?..

ramilani12

Qual erro de SQL que lhe retornou?

SidneiSantos

Estou testando pra ver se dou conta de mandar uma mensagem!

SidneiSantos

Legal! Dou conta de enviar uma mensagem com meu avatar!

Criado 19 de novembro de 2007
Ultima resposta 20 de nov. de 2007
Respostas 16
Participantes 6