Erro ao inserir dados no banco utilizando JSF

Boa tarde, todos !

Estou com problemas ao inserir dados no banco de dados utilizando JSF. Alguém poderia me ajudar, não estou conseguindo achar a causa do problema.

stack trace

javax.faces.el.EvaluationException: java.sql.SQLException: Column count doesn't match value count at row 1
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:102)
	at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
	at javax.faces.component.UICommand.broadcast(UICommand.java:315)
	at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:787)
	at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1252)
	at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
	at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
	at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
	at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:636)
Caused by: java.sql.SQLException: Column count doesn't match value count at row 1
	at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1073)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3603)
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3535)
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1989)
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2150)
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2626)
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2119)
	at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1362)
	at br.com.notas.persistencia.CursoDAO.adicionar(CursoDAO.java:24)
	at br.com.notas.managedbeans.AlunoFaces.finalizarAdicaoAluno(AlunoFaces.java:40)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at org.apache.el.parser.AstValue.invoke(AstValue.java:262)
	at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:278)
	at org.apache.jasper.el.JspMethodExpression.invoke(JspMethodExpression.java:70)
	at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
	... 28 more

------------------------------------------------------------------------------------------------------------------------

ManagedBeans



@ManagedBean
@SessionScoped
public class AlunoFaces {

    private String email;
    private String senha;
    private String mensagem;
    private Aluno aluno;
    AlunoDAO alunoDAO = new AlunoDAO();
    CursoDAO cursoDAO = new CursoDAO();

    public AlunoFaces() {      
      
    }

    public String adicionarAluno() {        
        this.setAluno(new Aluno());                        
        return "adicionandoAluno";
    }

    public String finalizarAdicaoAluno() throws SQLException, ClassNotFoundException {        
        boolean insereCurso = cursoDAO.adicionar(this.getAluno().getCurso());
        boolean insereAluno = alunoDAO.adicionar(this.getAluno());  
        if (insereCurso && insereAluno) {
            this.setMensagem("Aluno gravado com sucesso !");
            this.aluno = null;
            return "alunoAdcionado";
        }else{
            this.setMensagem("Não foi possível gravar o aluno ! ");
            this.aluno = null;
            return "alunoAdcionado";           
        }
       
    }

    public String efetuarLogin() throws SQLException, ClassNotFoundException {         
        if (alunoDAO.efetuarLogin(this.email, this.getSenha()) != null) {
            this.aluno = (alunoDAO.efetuarLogin(email, senha));            
            return "irCadastroNotas";
        } else {
            this.setMensagem("Nome e/ou senha inválidos !");
            return "naoIrCadastroNotas";            
        }
    }

    /**
     * @return the nome
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param nome the nome to set
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @param senha the senha to set
     */
    public void setSenha(String senha) {
        this.senha = senha;
    }

    /**
     * @return the mensagem
     */
    public String getMensagem() {
        return mensagem;
    }

    /**
     * @param mensagem the mensagem to set
     */
    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }

    /**
     * @return the aluno
     */
    public Aluno getAluno() {
        return aluno;
    }

    /**
     * @param aluno the aluno to set
     */
    public void setAluno(Aluno aluno) {
        this.aluno = aluno;
        this.aluno.setCurso(new Curso());
    }
}

-----------------------------------------------------------------------------------------------------------------
AlunoDAO

public class AlunoDAO extends Conexao {

    public boolean adicionar(Aluno aluno) throws SQLException, ClassNotFoundException {

        CursoDAO cursoDAO = new CursoDAO();       
                
        PreparedStatement ps = getPrepareStatement("INSERT INTO aluno VALUES(?,?,?,?,?,?,?,?,?,?)");
        ps.setString(1, aluno.getNome());
        ps.setString(2, aluno.getEndereco());
        ps.setString(3, aluno.getTelefone());
        ps.setString(4, aluno.getCidade());
        ps.setString(5, aluno.getEstado());
        ps.setString(6, aluno.getSenha());
        ps.setString(7, aluno.getEmail());
        ps.setString(8, aluno.getBairro());
        ps.setString(9, aluno.getInstituicao());
        ps.setInt(10, cursoDAO.pegarID(aluno.getCurso().getNome()));
        return ps.execute();

    }

    public boolean alterar(Aluno aluno) throws SQLException, ClassNotFoundException {

        this.pegarID(aluno);

        PreparedStatement ps = getPrepareStatement("UPDATE aluno SET nome = ?,endereco = ?,telefone = ?,cidade = ?,estado = ?,email = ?,bairro = ?,instituicao = ? WHERE idaluno = ?");
        ps.setString(1, aluno.getNome());
        ps.setString(2, aluno.getEndereco());
        ps.setString(3, aluno.getTelefone());
        ps.setString(4, aluno.getCidade());
        ps.setString(5, aluno.getEstado());
        ps.setString(6, aluno.getEmail());
        ps.setString(7, aluno.getBairro());
        ps.setString(8, aluno.getInstituicao());
        ps.setInt(9, aluno.getCodigo());
        return ps.execute();
    }

    private void pegarID(Aluno aluno) throws SQLException, ClassNotFoundException {

        PreparedStatement ps = getPrepareStatement("SELECT idaluno FROM aluno WHERE nome = ?");
        ps.setString(1, aluno.getNome());
        ResultSet rs = ps.executeQuery();
        if (rs.next()) {
            aluno.setCodigo(rs.getInt("idaluno"));
        }

    }

    public Aluno efetuarLogin(String email, String senha) throws SQLException, ClassNotFoundException {

        Aluno aluno = new Aluno();
       
        PreparedStatement ps = getPrepareStatement("SELECT * FROM aluno WHERE email = ? AND senha = ?");
        ps.setString(1, email);
        ps.setString(2, senha);
        ResultSet rs = ps.executeQuery();

        if (rs.next()) {

            aluno.setCodigo(rs.getInt("idaluno"));
            aluno.setNome(rs.getString("nome"));
            aluno.setEndereco(rs.getString("endereco"));
            aluno.setTelefone(rs.getString("telefone"));
            aluno.setCidade(rs.getString("cidade"));
            aluno.setEstado(rs.getString("estado"));
            aluno.setSenha(rs.getString("senha"));
            aluno.setEmail(rs.getString("email"));
            aluno.setBairro(rs.getString("bairro"));
            aluno.setInstituicao(rs.getString("instituicao"));
            
            return aluno;
            
        }else{            
     
            return null;
        }
    }
}
----------------------------------------------------------------------------------------------------------

Classe aluno

public class Aluno implements java.io.Serializable {
    private int codigo;
    private String nome;
    private String endereco;
    private String telefone;
    private String cidade;
    private String estado;
    private String senha;
    private String email;
    private String bairro;
    private String instituicao;
    private Curso curso;
    
    /**
     * @return the codigo
     */
    public int getCodigo() {
        return codigo;
    }

    /**
     * @param codigo the codigo to set
     */
    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the endereco
     */
    public String getEndereco() {
        return endereco;
    }

    /**
     * @param endereco the endereco to set
     */
    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    /**
     * @return the telefone
     */
    public String getTelefone() {
        return telefone;
    }

    /**
     * @param telefone the telefone to set
     */
    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    /**
     * @return the cidade
     */
    public String getCidade() {
        return cidade;
    }

    /**
     * @param cidade the cidade to set
     */
    public void setCidade(String cidade) {
        this.cidade = cidade;
    }

    /**
     * @return the estado
     */
    public String getEstado() {
        return estado;
    }

    /**
     * @param estado the estado to set
     */
    public void setEstado(String estado) {
        this.estado = estado;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @param senha the senha to set
     */
    public void setSenha(String senha) {
        this.senha = senha;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param email the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * @return the bairro
     */
    public String getBairro() {
        return bairro;
    }

    /**
     * @param bairro the bairro to set
     */
    public void setBairro(String bairro) {
        this.bairro = bairro;
    }

    /**
     * @return the instituicao
     */
    public String getInstituicao() {
        return instituicao;
    }

    /**
     * @param instituicao the instituicao to set
     */
    public void setInstituicao(String instituicao) {
        this.instituicao = instituicao;
    }

    /**
     * @return the curso
     */
    public Curso getCurso() {
        return curso;
    }

    /**
     * @param curso the curso to set
     */
    public void setCurso(Curso curso) {
        this.curso = curso;
    }
}
--------------------------------------------------------------------------------------

CursoDAO

public class CursoDAO extends Conexao{

    public boolean adicionar(Curso curso) throws SQLException, ClassNotFoundException {
        
        PreparedStatement ps = getPrepareStatement("INSERT INTO curso VALUES(?,?)");
        ps.setString(1, curso.getNome());
        ps.setInt(2, curso.getPeriodo());
        return ps.execute();
    }

    public int pegarID(String nome) throws SQLException, ClassNotFoundException {
        
        int codigo = 0;
        PreparedStatement ps = getPrepareStatement("SELECT idcurso WHERE nome = ?");
        ps.setString(1, nome);
        ResultSet rs = ps.executeQuery();
        if (rs.next()) {
            codigo = rs.getInt("idcurso");            
        }
        return codigo;
    }

    public boolean alterar(Curso curso) throws SQLException, ClassNotFoundException {
        
        PreparedStatement ps = getPrepareStatement("UPDATE curso SET nome = ?,periodo = ?,dataProva = ? WHERE = ?");
        ps.setString(1, curso.getNome());
        ps.setInt(2, curso.getPeriodo());
        ps.setInt(4, this.pegarID(curso.getNome()));
        return ps.execute();
    }
    
    public boolean deletar(Curso curso) throws SQLException, ClassNotFoundException{
        
        PreparedStatement ps = getPrepareStatement("DELETE FROM disciplina WHERE = ?");
        ps.setInt(1, this.pegarID(curso.getNome()));
        return ps.execute();                
    }
}

--------------------------------------------------------------------------------------------------------------------

classe Curso

public class Curso implements java.io.Serializable {
    private int codigo;
    private String nome;
    private int periodo;

    /**
     * @return the codigo
     */
    public int getCodigo() {
        return codigo;
    }

    /**
     * @param codigo the codigo to set
     */
    public void setCodigo(int codigo) {
        this.codigo = codigo;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the periodo
     */
    public int getPeriodo() {
        return periodo;
    }

    /**
     * @param periodo the periodo to set
     */
    public void setPeriodo(int periodo) {
        this.periodo = periodo;
    }
    
}
------------------------------------------------------------------------------

cadastroAluno.jsp

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>

<%@taglib prefix="f" uri="http://java.sun.com/jsf/core"%>
<%@taglib prefix="h" uri="http://java.sun.com/jsf/html"%>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Cadastro de Aluno</title>
    </head>
    <body>
        <f:view>
            <h:form>
                <font color ="orange"><h1><h:outputText value="Cadastrar Alunos"/></h1></font> 
                <h:panelGrid columns="3">

                    <h:outputText value="Instituição:"/></br>
                    <h:inputText value="#{alunoFaces.aluno.instituicao}" size="60" maxlength="100"/>    
                    
                    <h:outputText value="Curso:"/></br>
                    <h:inputText value="#{alunoFaces.aluno.curso.nome}" size="60" maxlength="100"/>  
                    
                    <h:outputLabel value="Periodo:" for="semestre"/></br>
                    <h:selectOneMenu value="#{alunoFaces.aluno.curso.periodo}" id="semestre">
                        <f:selectItem itemValue="01"/>
                        <f:selectItem itemValue="02"/>
                        <f:selectItem itemValue="03"/>
                        <f:selectItem itemValue="04"/>
                        <f:selectItem itemValue="05"/>
                        <f:selectItem itemValue="06"/>
                        <f:selectItem itemValue="07"/>
                        <f:selectItem itemValue="08"/>
                        <f:selectItem itemValue="09"/>
                        <f:selectItem itemValue="10"/>
                    </h:selectOneMenu>                   

                    <h:outputText value="Nome:"/></br>
                    <h:inputText value="#{alunoFaces.aluno.nome}" size="47" maxlength="100"/>  
                    
                    <h:outputText value="Endereço:"/></br>
                    <h:inputText value="#{alunoFaces.aluno.endereco}" size="47" maxlength="8"/>

                    <h:outputText value="Bairro:"/></br>
                    <h:inputText value="#{alunoFaces.aluno.bairro}"/>                              

                    <h:outputText value="Cidade:"/></br>
                    <h:inputText value="#{alunoFaces.aluno.cidade}"/>

                    <h:outputText value="Estado:"/></br>
                    <h:inputText value="#{alunoFaces.aluno.estado}"/>

                    <h:outputText value="Telefone:"/></br>
                    <h:inputText value="#{alunoFaces.aluno.telefone}"/>

                    <h:outputText value="E-mail:"/></br>
                    <h:inputText value="#{alunoFaces.aluno.email}" size="47" maxlength="100"/>

                    <h:outputText value="Senha:"/></br>
                    <h:inputSecret value="#{alunoFaces.aluno.senha}"/>                   

                </h:panelGrid>   
                 
                    <h:outputText value="#{alunoFaces.mensagem}" rendered="#{not empty alunoFaces.mensagem}"/>    
                    
                <h:commandButton value="Voltar" action="voltar"/>
                <h:commandButton value="Adicionar" action="#{alunoFaces.finalizarAdicaoAluno()}"/>
                
            </h:form>
        </f:view>
    </body>
</html>

Caused by: java.sql.SQLException: Column count doesn't match value count at row 1  

Seu problema está no SQL e não no JSF. Verifique a linha 24 da classe DAO

Nesta linha o SQL está errado:

PreparedStatement ps = getPrepareStatement("UPDATE curso SET nome = ?,periodo = ?,dataProva = ? WHERE = ?");

“WHERE = ?”

Deveria ser algo do tipo “WHERE id = ?”

Abraços,

Obrigado a todos, mas tinha achado o problema.

O erro é de sintaxe SQL, a princípio ao adicionar os dados do curso com INSERT INTO curso VALUES(?,?) não deu certo mudei para INSERT INTO curso(nome,periodo) VALUES (?,?) deu certo o engraçado é que em outros bancos a primeira opção funciona.

Após corrigir isso tinha outra problema ao pegar o Id do Aluno mas foi resolvido. Obrigado a todos pela ajuda !

Valeu riqueLuz e finotti um abraço!