Erro inserir dados no acces

16 respostas
R

Galera será que tem alguem que possa me ajudas pois estou iniciando java que é uma linguagem a qual me indentifiquei,
será que alguem poderia me ajudar com esse erro(os campos de valores da consulta e destino não coincidem)

olha o meu codigo aí

try
          {
              String slqinsert = " insert into aluno(nome,altura,idade,gub,peso,nascimento,rua,numeroCasa"+
                      "cidade,bairro,uf,cep,fone,rg,cpf,anoTKD,indicado,venc_mens,valor_mens,nome_resp"+
                      "nasc_respon,cpf_respon,rg_respon,fone_respon) values ('"+
                      
                      tf_nome.getText()+"','"+
                      tf_altura.getText()+"','"+
                      tf_idade.getText()+"','"+
                      tf_gub.getText()+"','"+
                      tf_peso.getText()+"','"+
                      tf_data_nasc.getText()+"','"+
                      tf_rua.getText()+"','"+
                      tf_numero.getText()+"','"+
                      tf_cidade.getText()+"','"+
                      tf_bairro.getText()+"','"+
                      tf_uf.getText()+"','"+
                      tf_cep.getText()+"','"+
                      tf_fone.getText()+"','"+
                      tf_rg.getText()+"','"+
                      tf_cpf.getText()+"','"+
                      tf_ano_tkd.getText()+"','"+
                      tf_indicado.getText()+"','"+
                      tf_venc_mens.getText()+"','"+
                      tf_valor_mens.getText()+"','"+
                      tf_nome_resp.getText()+"','"+
                      tf_nasc_resp.getText()+"','"+
                      tf_cpf_resp.getText()+"','"+
                      tf_rg_resp.getText()+"','"+
                      tf_fone_resp.getText()+"')";
            con_aluno.Preparedstatement.executeUpdate(slqinsert);
            JOptionPane.showMessageDialog(null,"Gravação realizada com sucesso!");
            
           // con_aluno.resultset = con_aluno.statement.executeQuery("Select from * aluno");        
            con_aluno.executeSQL("select * from aluno");
            con_aluno.resultset.first();
                      mostrar_dados();
          }
          catch(SQLException erro)
          {
              JOptionPane.showMessageDialog(null," erro ao tentar salvar\n" + erro.getMessage());
              
          }

Código atualizado!!!!!

erro!

Número de Valores da Consulta e Campos de destinos não coincidem

16 Respostas

S

Só uma dica amigo. Use PreparedStatement ao invés de Statement. Seu código ficará muito mais limpo uma vez que vc não vai precisar ficar concatenando strings. E também auxilia na segurança do seu banco, prevenindo contra a técnica de SQL Injection.

Mais informações na apostila FJ21 da Caelum. Muito boa, por sinal.

Vingdel

rillsen12, bem-vindo ao GUJ!

Além da dica do amigo Soruji, fica a dica para você postar seus códigos entre as tags para que seu código fique mais legível.

Seria excelente você iniciar por editar essa sua postagem clicando em “Editar” no canto direito superior da postegem e colocar o código entre as tags que indiquei, se for mais fácil use a barra de ferramentas que fica acima da caixa de texto. Leia as regras do fórum, pois lá estão dicas que podem te ajudar bastante na utilização do fórum.

Abraço!

Fexx

Use as tags code para postar codigos.

Seu sql.

insert into aluno(nome,altura,idade,gub,peso,nascimento,rua,numeroCasa"+
	"cidade,bairro,uf,cep,rg,cpf,anoTKD,indicado,venc_mens,nome_resp"+
	"nasc_respon,cpf_respon,rg_respon,fone_respon,fone,valor_mens) values ('"+

Verifique a passagem de parametros, até o cep, ok conforme em cima, mas depois além de vim o rg, cpf, ano etc… vc está informando o fone , sendo que no seu sql o fone é o penultimo valor.

tf_nome.getText()+"','"+
	tf_altura.getText()+"','"+
	tf_idade.getText()+"','"+
	tf_gub.getText()+"','"+
	tf_peso.getText()+"','"+
	tf_data_nasc.getText()+"','"+
	tf_rua.getText()+"','"+
	tf_numero.getText()+"','"+
	tf_cidade.getText()+"','"+
	tf_bairro.getText()+"','"+
	tf_uf.getText()+"','"+
	tf_cep.getText()+"','"+
        tf_fone.getText()+"','"+

A utilize PreparedStatement, seu coldigo fica mais legivel e mais facil de dá manutenção, evitando o sql injection, além da execução ser mais rapida do que o Statement, ele é capaz de pré compilar a quela query, antes mesmo de enviar ao banco, ou seja vc pode executar a query varias vezes seguidas, é claro alterando os parametros.

Boa sorte.

R

Valeu! mais eu arrumei isso aí e continua dando o erro!

ViniGodoy

Tópico movido para o fórum de Persistência.

Já alterou seu código para usar PreparedStatement? Então poste como ficou a correção.
E também seria legal você postar a mensagem de erro.

R

já atualizei o codigo!

Vingdel

rillsen12, boa tarde!

Obrigado por ajustar seu código, agora ficou mais fácil de ajudar.

Repare que na string da instrução SQL está faltando “,” (vírgula) após os campos “numeroCasa” e “nome_resp”.

Abraço!

R

Valeu cara, muito obrigado deu certo agora, obrigado a todos!

ViniGodoy

Ainda assim, procure arrumar seu PreparedStatement para fazer uso de parâmetros. Veja um exemplo:

//Pega os ids de caixas de texto (poderiam vir de qualquer lugar, é só um exemplo)
int idEscola = Integer.parseInt(txtIdEscola.getText());
int idAluno = Integer.parseInt(txtIdAluno.getText());

//Prepara o statement. Note que os parâmetros são passados por funções, sem concatenação
PreparedStatement stmt = con.prepareStatement("SELECT nome FROM Aluno WHERE codEscola=? AND codAluno = ?");
stmt.setInt(1, idEscola);
stmt.setInt(2, idAluno);

//Executa o statemente. Não é necessário passar a query no método executeQuery().
ResultSet rs = stmt.executeQuery();

Com essa técnica, é descenessário colocar ‘’ nos campos de String ou conhecer formatos de data específicos do banco. Além disso, não dá erro se o usuário colocar ’ em uma de suas Strings.
E não dá para negar que o código fica mais limpo, por evitar concatenação.

Vingdel

Vini, bom dia!

Acho que você confundiu os argumentos de setInt() e do parseInt().

EDIT:

rillsen12, caso tua dúvida já esteja esclarecida, por favor, edite a tua primeira postagem no tópico e adicione [RESOLVIDO] ao assunto.

Obrigado!

Abraço!

ViniGodoy

Tem razão, editar código na correria não dá muito certo. :slight_smile:
Já corrigi ali.

Vingdel

Agora faltaram só os parenteses de fechamento dos setInt().

Eita correria… rs

Abraço!

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);
	}
}

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: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: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: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: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:98)
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)

Vingdel

Augusto de Paula, bom dia!

Sua instrução SQL está errada. Veja: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()+"')";

Repare que você indica 9 campos e 11 valores a serem inseridos, a forma que você está fazendo com o JRadioButton está errada. O campo “Endereço” está com “ç” mesmo? Além desses detalhes, procurer estudar PreparedStatement, vai facilitar muito a sua vida e deixar as coisas mais seguras.

Abraço!

A

Valew Vingdel. Consegui resolver esse probleminha… brigadão…
Só não consegui gravar os dados dos Buttons… O sistema não reconhece os botões para gravar uma opção.

Vingdel

Augusto, bom dia!

Você tem que pegar um única string, de acordo com o objeto JRadioButton selecionado e passar essa string para o banco.

Você poderia fazer mais o menos assim:
String sexo;

JRadioButton mascButton = new JRadioButton("Masculino");
mascButton.addActionListener(this);

JRadioButton femButton = new JRadioButton("Feminino");
mascButton.addActionListener(this);

ButtonGroup sexoGroup = new ButtonGroup();
sexoGroup.add(mascButton);
sexoGroup.add(femButton);

public void actionPerformed(ActionEvent e) {
	if(e.getSource() == mascButton || e.getSource() == femButton)
		sexo = e.getText();
}
Lembrando que a classe deve implementar ActionListener.

Daí então você pode passar a variável sexo na instrução SQL para o campo Sexo.

Uma outra sugestão, seria que você pode mexer no seu banco definir o campo Sexo como char, afinal sexo pode ser 'm' ou 'f'.

Abraço e espero que ajude!

Criado 10 de fevereiro de 2012
Ultima resposta 15 de fev. de 2012
Respostas 16
Participantes 6