[Resolvido]Probleminha com atualização de dados utilizando JSP

Olá pessoal!!!
Estou com um probleminha que não tenho idéia do que seja… na hora de atualizar meus dados em uma página jsp, dá um erro que não sei o porque dele. Diz que há um campo nulo, mas não há!!
Erro

exception 

org.apache.jasper.JasperException: Exception in JSP: /EfetuaAtualizacao.jsp:18

15:     <body>
16:         
17:         <%
18:         int codigo = Integer.parseInt(request.getParameter("codigo"));
19:         String nome = request.getParameter("nome");
20:         String sobrenome = request.getParameter("sobrenome");
21:         String rua = request.getParameter("rua");


Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:504)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)

java.lang.NumberFormatException: null
	java.lang.Integer.parseInt(Integer.java:415)
	java.lang.Integer.parseInt(Integer.java:497)
	org.apache.jsp.EfetuaAtualizacao_jsp._jspService(EfetuaAtualizacao_jsp.java:58)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:368)

E esse é o que lista os dados antes de atualiza-los

<body>

    <%
        int codigo = Integer.parseInt(request.getParameter("codigo"));
                
        if(codigo!=0){
                Connection conn = null;
                PreparedStatement pst = null;
                ResultSet rs = null;
                
                try {
                    Class.forName("com.mysql.jdbc.Driver").newInstance( );
                    conn = DriverManager.getConnection("jdbc:mysql://localhost/cadastro",
                            "root","123");

                    pst = conn.prepareStatement("select * from cliente where codigo=?");
                    pst.setInt(1, codigo);
                    rs = pst.executeQuery( );
                    pst.clearParameters( );
                    
                    if(rs.next( )){
    %> 
    
    <form action="EfetuaAtualizacao.jsp" method="post">
            <table>
                <tr>
                    <td>Codigo</td>
                    <td><input disabled="false" type="text" name="codigo" 
                        value="<%= rs.getString("codigo") %>" />
                    </td>
                </tr>
                <tr>
                    <td>Nome</td>
                    <td><input type="text" name="nome" 
                        value="<%= rs.getString("nome") %>" />
                    </td>
                </tr>
                <tr>
                    <td>Sobre nome</td>
                    <td><input type="text" name="sobrenome" 
                        value="<%= rs.getString("sobrenome") %>" />
                    </td>
                </tr>
                <tr>
                    <td>Rua</td>
                    <td>
                        <input type="text" name="rua" 
                        value="<%= rs.getString("rua")%>"/>
                    </td>
                </tr>
                <tr>
                    <td>Numero</td>
                    <td>
                        <input name="numero" type="text"
                        value="<%= rs.getInt("numero") %>"/>
                    </td>
                </tr>
                <tr>
                    <td>Bairro</td>
                    <td>
                        <input type="text" name="bairro"
                        value="<%= rs.getString("bairro") %>"/>
                    </td>
                </tr>
                <tr>
                    <td>Cidade</td>
                    <td>
                        <input type="text" name="cidade"
                        value="<%= rs.getString("cidade") %> "/>
                    </td>
                </tr>
                <tr>
                    <td>Estado</td>
                    <td>
                        <input type="text" name="estado"
                        value="<%= rs.getString("estado") %>"/>
                    </td>
                </tr>
                <tr>
                    <td>CPF</td>
                    <td>
                        <input type="text" name="cpf"
                        value="<%= rs.getString("cpf") %>"/>
                    </td>
                </tr>
                <tr>
                    <td>Salario</td>
                    <td>
                        <input type="text" name="salario"
                        value="<%= rs.getDouble("salario") %>"/>
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        <input type="submit" name="btAtualizar" value="Atualizar" />
                    </td>
                </tr>		
            </table>
        </form> 
        <%
            }//end if
            else{ out.println("Codigo não encontrado"); }
            }  catch (Exception ex) {
                ex.printStackTrace( );
            }  finally {
                if (pst != null) pst.close( );
                if (rs != null) rs.close( );
                if (conn != null) conn.close( );
            }
            }// end if
        %>
    
    </body>

Esse aqui é meu código que faz a atualização:

<body>      
        <%
        int codigo = Integer.parseInt(request.getParameter("codigo"));
        String nome = request.getParameter("nome");
        String sobrenome = request.getParameter("sobrenome");
        String rua = request.getParameter("rua");
        int numero = Integer.parseInt(request.getParameter("numero"));
        String bairro = request.getParameter("bairro");
        String cidade = request.getParameter("cidade");
        String estado = request.getParameter("estado");
        String cpf = request.getParameter("cpf");
        double salario = Double.parseDouble(request.getParameter("salario"));
        
        if(codigo!=0){
                Connection conn = null;
                PreparedStatement pst = null;

                try {
                    Class.forName("com.mysql.jdbc.Driver").newInstance( );
                    conn =
                            DriverManager.getConnection("jdbc:mysql://localhost/cadastro",
                            "root","123");

                    String SQL = "UPDATE cliente SET " +
                            "nome=?,sobrenome=?" +
                            ",rua=?,numero=?,bairro=?,cidade=?,estado=?" +
                            "cpf=?,salario=? WHERE codigo=?";

                    pst = conn.prepareStatement(SQL);
                    pst.setString(1, nome);
                    pst.setString(2, sobrenome);
                    pst.setString(3, rua);
                    pst.setInt(4, numero);
                    pst.setString(5, bairro);
                    pst.setString(6, cidade);
                    pst.setString(7, estado);
                    pst.setDouble(8, salario);
                    pst.setInt(9, codigo);
                    
                    pst.executeUpdate( ); //<-- O PROBLEMA ESTA AQUI...
                    pst.clearParameters( );
                    out.println("Os dados do codigo: "+codigo+" foram atualizados");
                    %>
                    <p><p>
                    <a >Página principal</a>
                    

        &lt;%        }  catch (Exception ex) {
                    ex.printStackTrace( );
                    out.println("Erro ao atualizar");
                    
                }  finally {
                    if (pst != null) pst.close( );
                    if (conn != null) conn.close( );
                }
            }//end if
            else{
                out.println("Codigo inexistente");
            }
        %&gt;  
    &lt;/body&gt;


Cara o que pode estar acontencendo é de ir espaços junto com o código, veja se não é isso que está interferindo!

Realmente tinha alguns espaços a mais, mas o erro ainda persiste.
Já fiz testes e o erro está quando ele passa aqui:

 pst.executeUpdate( ); //<-- O PROBLEMA ESTA AQUI...  
 pst.clearParameters( );  
String SQL = "UPDATE cliente SET " +   
                            "nome=?, sobrenome=?" +   
                            ",rua=?,numero=?,bairro=?,cidade=?,estado=?" +   
                            "cpf=?,salario=? WHERE codigo=?";   //<-- ESTÁ ESPERANDO 10 PARÂMETROS
  
                    pst = conn.prepareStatement(SQL);   
                    pst.setString(1, nome);   
                    pst.setString(2, sobrenome);   
                    pst.setString(3, rua);   
                    pst.setInt(4, numero);   
                    pst.setString(5, bairro);   
                    pst.setString(6, cidade);   
                    pst.setString(7, estado);   
                    pst.setDouble(8, salario);   
                    pst.setInt(9, codigo);   //<- PASSA 9 PARÂMETROS!!!, da uma corrigida nisso que deve funfar!

A propósito, o erro mudou de linha, e também mandou o erro ou continua NumberFormatException?

infelizmente também não foi isso!!

Continua dando o mesmo erro de NumberFormatException?

sim

sim, continua o formatexception null

Ninguém tem uma idéia :roll:

Idéias, idéias…?

NumberFormatException só pode estar ocorrendo em int codigo = Integer.parseInt(request.getParameter(“codigo”)); e
int numero = Integer.parseInt(request.getParameter(“numero”)); pelo que imagino! No método executeUpdate não deve ser!

Ola

Para este problema eu costumo mostrar o conteudo da consulta SQL,
verificando se contem todos os dados preenchidos.
(DESSA FORMA VOCE ENCONTRA O PROBLEMA).
(Ex.: UPDATE tabela SET valor=1000, nome=‘joao’;), na tela que vai salvar.

t+

Verifiquei os espaços e não é. Cheguei a outra conclusão, debugando no passo-a-passo do netbeans, vi que esse “código” tá chegando aqui null. Agora não sei o porque sendo que a página AtualizaDados.jsp tem um formulário que envia o código para o EfetuaAtualização.jsp (que é o problemático!!) faço todas as conversões e só com essa página que dá erro, na de excluir não tem problema algum. Já olhei a string, na página AtualizaDados.jsp e é a mesma que vai para pagina de exclusão e funciona, só nessa que dá pau… :cry: [color=darkblue] [/color]

&lt;%@page contentType="text/html"
        pageEncoding="UTF-8"
        language ="java"
        import="java.sql.*"
%&gt;
       &lt;%
        int codigo = Integer.parseInt(request.getParameter(&quot;codigo&quot;));
                
        if(codigo!=0){
                Connection conn = null;
                PreparedStatement pst = null;
                ResultSet rs = null;
    ...            
    &lt;form action=&quot;EfetuaAtualizacao.jsp&quot; method=&quot;post&quot;&gt; //&lt;&lt;---- mandando para a página de 
            &lt;table&gt;                                                                   //atualização onde dá erro
                &lt;tr&gt;
                    &lt;td&gt;Codigo&lt;/td&gt;
                    &lt;td&gt;&lt;input disabled="false" type="text" name="codigo" 
                        value="&lt;%= rs.getString("codigo") %&gt;&quot; /&gt;
                    &lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    ...
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td colspan="2"&gt;
                        &lt;input type="submit" name="btAtualizar" value="Atualizar" /&gt;
                    &lt;/td&gt;
                &lt;/tr&gt;		
            &lt;/table&gt;
        &lt;/form&gt;    
    &lt;/body&gt;
&lt;/html&gt;

Eis a problemática!!!

&lt;%@page contentType="text/html"
        pageEncoding="UTF-8"
        language="java"
        import="java.sql.*"%&gt;


&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd"&gt;

&lt;html&gt;
    &lt;head&gt;
        &lt;meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&gt;
        &lt;title&gt;JSP Page&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        
        &lt;%
        int codigo = Integer.parseInt(request.getParameter("codigo")); //&lt;&lt;---- So esse atributo chega null, o restante já testei, chega 
        String nome = request.getParameter("nome");                            // com valor
        String sobrenome = request.getParameter("sobrenome");
        String rua = request.getParameter("rua");
        int numero = Integer.parseInt(request.getParameter("numero"));
        String bairro = request.getParameter("bairro");
        String cidade = request.getParameter("cidade");
        String estado = request.getParameter("estado");
        String cpf = request.getParameter("cpf");
        double salario = Double.parseDouble(request.getParameter("salario"));
        
        if(codigo!=0){
                Connection conn = null;
                PreparedStatement pst = null; //executa operacoes no banco utilizando
                                              //parametros de entrada.

                try {
                    Class.forName("com.mysql.jdbc.Driver").newInstance( );
                    conn =
                            DriverManager.getConnection("jdbc:mysql://localhost/cadastro",
                            "root","123");

                    String SQL = "UPDATE cliente SET " +
                            "nome=?,sobrenome=?" +
                            ",rua=?,numero=?,bairro=?,cidade=?,estado=?" +
                            "cpf=?,salario=? WHERE codigo=?";

                    pst = conn.prepareStatement(SQL);
                    pst.setString(1, nome);
                    pst.setString(2, sobrenome);
                    pst.setString(3, rua);
                    pst.setInt(4, numero);
                    pst.setString(5, bairro);
                    pst.setString(6, cidade);
                    pst.setString(7, estado);
                    pst.setDouble(8, salario);
                    pst.setInt(9, codigo);
                    
                    pst.executeUpdate( );
                    pst.clearParameters( );
                    out.println("Os dados do codigo: "+codigo+" foram atualizados");
                    %&gt;
                    <p><p>
                    <a >Página principal</a>
                    

        &lt;%        }  catch (Exception ex) {
                    ex.printStackTrace( );
                    out.println("Erro ao atualizar" + ex.printStackTrace());
                    
                }  finally {
                    if (pst != null) pst.close( );
                    if (conn != null) conn.close( );
                }
            }//end if
            else{
                out.println("Codigo inexistente");
            }
        %&gt;
        

    
    
    &lt;/body&gt;
&lt;/html&gt;

Aham, o problema ainda estava no parseInt né heheh, o problema é que você está setando o campo código como disabled, experimenta retirar o disabled=“false” pra ver o que vai acontecer!

Galera, um amigo meu me ajudou a encontrar o erro!!!

 String SQL = "UPDATE cliente SET " +  
                             "nome=?,sobrenome=?" +  
                             ",rua=?,numero=?,bairro=?,cidade=?,estado=?" +  
                             "cpf=?,salario=? WHERE codigo=?";  

Entre os atributos estado e cpf tá faltando uma vírgula !!!

 String SQL = "UPDATE cliente SET " +  
                             "nome=?,sobrenome=?" +  
                             ",rua=?,numero=?,bairro=?,cidade=?,estado=?" +  
                             ",cpf=?,salario=? WHERE codigo=?";  

eu criei um formulario de atualizacao de dados, mas quando o usuario deixa de preencher um campo do formulario que ele nao quer atualizar no bd o codigo jsp pega esse espaco em branco e guarda no banco de dados.
por acaso tem como isso nao ocorrer???
eu quero que o dado que o usuario nao alterou permaneca no bd e somente as alteracoes feitas sejam guardadas!!!
Desde ja agradeco a atencao!

:wink:

obs: codigo em anexo!

[code]<%
String id_ra="";
String endereco="";
String cep="";
String bairro="";
String cidade="";
String estado="";
String foto="";
String tel_residencial="";
String tel_celular="";
String e_mail="";
String estado_civil="";
String filhos="";

    if(request.getParameter("id_ra")!=null)
    {
      id_ra=request.getParameter("id_ra");
    }
    else
    {
      out.println("<i>Entre com o seu RA:</i>"); 
    }
    
    if(request.getParameter("endereco")!=null)
    {
      endereco=request.getParameter("endereco");
    }
    else
    {
      out.println("<i>Entre com o novo Endereço:</i>"); 
    }
    
    if(request.getParameter("cep")!=null)
    {
      cep=request.getParameter("cep");
    }
    else
    {
      out.println("<i>Entre com o seu novo CEP:</i>"); 
    }
    
    if(request.getParameter("bairro")!=null)
    {
      bairro=request.getParameter("bairro");
    }
    else
    {
      out.println("<i>Entre com o novo Bairro:</i>"); 
    }
    
    if(request.getParameter("cidade")!=null)
    {
      cidade=request.getParameter("cidade");
    }
    else
    {
      out.println("<i>Entre com a sua nova Cidade:</i>"); 
    }
    
    if(request.getParameter("estado")!=null)
    {
      estado=request.getParameter("estado");
    }
    else
    {
      out.println("<i>Entre com o novo Estado:</i>"); 
    }
    
    if(request.getParameter("foto")!=null)
    {
      foto=request.getParameter("foto");
    }
    else
    {
      out.println("<i>Entre com a sua nova Foto:</i>"); 
    }
    
    if(request.getParameter("tel_residencial")!=null)
    {
      tel_residencial=request.getParameter("tel_residencial");
    }
    else
    {
      out.println("<i>Entre com o novo numero de Telefone Residencial:</i>"); 
    }
    
    if(request.getParameter("tel_celular")!=null)
    {
      tel_celular=request.getParameter("tel_celular");
    }
    else
    {
      out.println("<i>Entre com o seu novo numero de Telefone Celular:</i>"); 
    }
    
    if(request.getParameter("e_mail")!=null)
    {
      e_mail=request.getParameter("e_mail");
    }
    else
    {
   //   out.println("<i>Entre com o seu novo endereco de E-mail:</i>"); 
    }
    
    if(request.getParameter("estado_civil")!=null)
    {
      estado_civil=request.getParameter("estado_civil");
    }
    else
    {
      out.println("<i>Entre com o seu novo Estado Civil:</i>"); 
    }
    
    if(request.getParameter("filhos")!=null)
    {
      filhos=request.getParameter("filhos");
    }
    else
    {
      out.println("<i>Entre com o novo numero de Filhos:</i>"); 
    }       
        
      try
        {
        //Passo1: Carregar o Driver JDBC
        Class.forName("com.mysql.jdbc.Driver").newInstance();
        
        //Passo2: Criar um objeto para Conexao
        Connection con=DriverManager.getConnection("jdbc:mysql://localhost/integracao","root","");
        
        //Passo3: Criar um objeto para execucao de consultas
        Statement s=con.createStatement();
        
        //Passo4: alterar um produto                              
        String sql="update alunos set endereco=\""+endereco+"\", cep=\""+cep+"\", bairro=\""+bairro+"\", cidade=\""+cidade+"\", estado=\""+estado+"\", foto=\""+foto+"\", tel_residencial=\""+tel_residencial+"\",tel_celular=\""+tel_celular+"\", e_mail=\""+e_mail+"\", estado_civil=\""+estado_civil+"\", filhos=\""+filhos+"\"  where id_ra=\""+id_ra+"\" ";
                                                         
        int rs=s.executeUpdate(sql);
        if(rs!=0)
        {
          out.print("<br><br><center>Você alterou seu cadastro acadêmico com sucesso!</center><br><br><br>");
        }
          else
          {
            out.print("<br><br><center>Erro ao Alterar o Cadastro Acadêmico!!!</center><br><br>");
          }
          s.close();
          con.close();
          }
            catch(ClassNotFoundException e1)
            {
               out.print("Erro de Conexão JDBC!!!");
            }
  %>

[/code]