[RESOLVIDO] Erro ao fazer INSERT [Column count doesn't match value count at row 1]

10 respostas
Vitoriano

Olá, estou com um problema… Tem uma tabela minha que esta com esses campos abaixo, e a pf_id é um INT AUTO_INCREMENT, e quando vou fazer o insert (clico no botão), ele da esse erro:
Column count doesn’t match value count at row 1

//stmt.executeUpdate("insert into sistema (sys_user, sys_pass) values ('"+sys_user+"' , '"+sys_pass+"') " ); stmt.executeUpdate("insert into pessoa (pf_id, pf_cpf, pf_nome, pf_sobrenome, pf_email, pf_tel_dd, pf_tel, pf_cel_dd, pf_cel, pf_nascimento, pf_end, pf_end_cid, pf_end_uf, pf_end_cep) " + "values ('' , '"+pf_cpf+"' , '"+pf_nome+"' , '"+pf_sobrenome+"' , '"+pf_email+"' , '"+pf_tel_dd+"' , '"+pf_tel+"' , '"+pf_cel_dd+"' , '"+pf_cel+"' , '"+pf_nascimento+"' , '"+pf_end+"' , '"+pf_end_cid+"' + '"+pf_end_uf+"' , '"+pf_end_cep+"' ) " ); JOptionPane.showMessageDialog( this, " Dados Salvos! "); con.close(); // fecha conexão com BD } catch( SQLException e){ //trata os erros JOptionPane.showMessageDialog(this, "Erro no cmdo do SQL " + e.getMessage() ); }

Alguma idéia? :roll:

Obrigado pela atenção!

10 Respostas

Andre_Rosa

Já pesquisou pelo erro? Aparentemente ele é muito comum. Veja:
http://www.google.com.br/search?sourceid=chrome&ie=UTF-8&q=Column+count+doesn’t+match+value+count

Dapcapix

Estou chutando, tire o ‘’ , ‘’’ antes do +pf_cpf+

stmt.executeUpdate("insert into pessoa
(pf_id, pf_cpf, pf_nome, pf_sobrenome, pf_email, pf_tel_dd, pf_tel, pf_cel_dd, pf_cel, pf_nascimento, pf_end, pf_end_cid, pf_end_uf, pf_end_cep) "  
            + "values ([b]'' , '"[/b]+pf_cpf+"' , '"+pf_nome+"' , '"+pf_sobrenome+"' , '"+pf_email+"' , '"+pf_tel_dd+"' , '"+pf_tel+"' , '"+pf_cel_dd+"' , '"+pf_cel+"' , '"+pf_nascimento+"' , '"+pf_end+"' , '"+pf_end_cid+"' + '"+pf_end_uf+"' , '"+pf_end_cep+"' ) " );
 
    JOptionPane.showMessageDialog( this, " Dados Salvos! "); 
 
    con.close(); // fecha conexão com BD 
 }   
        
    catch( SQLException e){ //trata os erros  
    JOptionPane.showMessageDialog(this, "Erro no cmdo do SQL " +  
    e.getMessage() );  
}

Eu faria assim:

public void salvar(Pessoa pessoa) {
		this.session.saveOrUpdate(pessoa);
	}

Chega dar um “nó” no olho ver esse seu código, rsrs.

Vitoriano

Andre Rosa:
Já pesquisou pelo erro? Aparentemente ele é muito comum. Veja:
http://www.google.com.br/search?sourceid=chrome&ie=UTF-8&q=Column+count+doesn’t+match+value+count

Ja consultei, e a maioria das soluções eu ja fiz e não resolveu…

Vitoriano

Dapcapix:
Estou chutando, tire o ‘’ , ‘’’ antes do +pf_cpf+

stmt.executeUpdate("insert into pessoa
(pf_id, pf_cpf, pf_nome, pf_sobrenome, pf_email, pf_tel_dd, pf_tel, pf_cel_dd, pf_cel, pf_nascimento, pf_end, pf_end_cid, pf_end_uf, pf_end_cep) "  
            + "values ([b]'' , '"[/b]+pf_cpf+"' , ...

Eu faria assim:

public void salvar(Pessoa pessoa) {
		this.session.saveOrUpdate(pessoa);
	}

Chega dar um “nó” no olho ver esse seu código, rsrs.

Tentei fazer o que você recomendou, tirei o ‘’ , ‘’ mas não adiantou…
E não estou tratando melhor do codigo pq ainda nao sei hibernate, estou começando a estudar. Alguma solução usando java apenas para melhorar esse “nó” hehe

Abs

M

Ow, ta faltando uma virgula :

stmt.executeUpdate(“insert into pessoa (pf_id, pf_cpf, pf_nome, pf_sobrenome, pf_email, pf_tel_dd, pf_tel, pf_cel_dd, pf_cel, pf_nascimento, pf_end, pf_end_cid, pf_end_uf, pf_end_cep)
+ “values (’’ , '”+pf_cpf+”’ , '”+pf_nome+"’ , ‘"+pf_sobrenome+"’ , ‘"+pf_email+"’ , ‘"+pf_tel_dd+"’ , ‘"+pf_tel+"’ , ‘"+pf_cel_dd+"’ , ‘"+pf_cel+"’ , ‘"+pf_nascimento+"’ , ‘"+pf_end+"’ , ‘"+pf_end_cid+"’ + '"+pf_end_uf+"’ , ‘"+pf_end_cep+"’ ) " );

por isso ta dando a exception indicando que o numero de colunas nao bate com a quantidade de value passado.

Vitoriano

marciavilaca:
Ow, ta faltando uma virgula :

stmt.executeUpdate(“insert into pessoa (pf_id, pf_cpf, pf_nome, pf_sobrenome, pf_email, pf_tel_dd, pf_tel, pf_cel_dd, pf_cel, pf_nascimento, pf_end, pf_end_cid, pf_end_uf, pf_end_cep)
+ “values (’’ , '”+pf_cpf+”’ , '”+pf_nome+"’ , ‘"+pf_sobrenome+"’ , ‘"+pf_email+"’ , ‘"+pf_tel_dd+"’ , ‘"+pf_tel+"’ , ‘"+pf_cel_dd+"’ , ‘"+pf_cel+"’ , ‘"+pf_nascimento+"’ , ‘"+pf_end+"’ , ‘"+pf_end_cid+"’ + '"+pf_end_uf+"’ , ‘"+pf_end_cep+"’ ) " );

por isso ta dando a exception indicando que o numero de colunas nao bate com a quantidade de value passado.

Obrigado, mas agora o erro mudou para: “Incorrect integer value: ‘’ for column ‘pf_id’ at row 1

M

ao inves de passar ‘’ , tenta passar null

Vitoriano

Ja tentei, mas não consegui. Como passaria NULL nesse caso?

M

Voce pode passar null assim:

//stmt.executeUpdate("insert into sistema (sys_user, sys_pass) values ('"+sys_user+"' , '"+sys_pass+"') " ); stmt.executeUpdate("insert into pessoa (pf_id, pf_cpf, pf_nome, pf_sobrenome, pf_email, pf_tel_dd, pf_tel, pf_cel_dd, pf_cel, pf_nascimento, pf_end, pf_end_cid, pf_end_uf, pf_end_cep) " + "values (null , '"+pf_cpf+"' , '"+pf_nome+"' , '"+pf_sobrenome+"' , '"+pf_email+"' , '"+pf_tel_dd+"' , '"+pf_tel+"' , '"+pf_cel_dd+"' , '"+pf_cel+"' , '"+pf_nascimento+"' , '"+pf_end+"' , '"+pf_end_cid+"' , '"+pf_end_uf+"' , '"+pf_end_cep+"' ) " ); JOptionPane.showMessageDialog( this, " Dados Salvos! "); con.close(); // fecha conexão com BD } catch( SQLException e){ //trata os erros JOptionPane.showMessageDialog(this, "Erro no cmdo do SQL " + e.getMessage() ); }

Ou então nao fazer referencia ao campo auto-incremento assim:

//stmt.executeUpdate("insert into sistema (sys_user, sys_pass) values ('"+sys_user+"' , '"+sys_pass+"') " );
        stmt.executeUpdate("insert into pessoa (pf_cpf, pf_nome, pf_sobrenome, pf_email, pf_tel_dd, pf_tel, pf_cel_dd, pf_cel, pf_nascimento, pf_end, pf_end_cid, pf_end_uf, pf_end_cep) "
                + "values ('"+pf_cpf+"' , '"+pf_nome+"' , '"+pf_sobrenome+"' , '"+pf_email+"' , '"+pf_tel_dd+"' , '"+pf_tel+"' , '"+pf_cel_dd+"' , '"+pf_cel+"' , '"+pf_nascimento+"' , '"+pf_end+"' , '"+pf_end_cid+"' , '"+pf_end_uf+"' , '"+pf_end_cep+"' ) " );
        JOptionPane.showMessageDialog( this, " Dados Salvos! ");
        con.close(); // fecha conexão com BD
        } 
            catch( SQLException e){ //trata os erros
        JOptionPane.showMessageDialog(this, "Erro no cmdo do SQL " +
        e.getMessage() );
        }
Vitoriano

marciavilaca:

Voce pode passar null assim:

Ou então nao fazer referencia ao campo auto-incremento assim:

Tentei a 1ª opção, e consegui. A segunda tinha tentado antes, e não tinha dado certo antes, vou tentar novamente.
E obrigado!

Criado 17 de junho de 2011
Ultima resposta 22 de jun. de 2011
Respostas 10
Participantes 4