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

15 respostas
moacirjava

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;


15 Respostas

e-cowboy

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

moacirjava

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( );
e-cowboy
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?

moacirjava

infelizmente também não foi isso!!

e-cowboy

Continua dando o mesmo erro de NumberFormatException?

moacirjava

sim

moacirjava

sim, continua o formatexception null

moacirjava

Ninguém tem uma idéia :roll:

moacirjava

Idéias, idéias…?

e-cowboy

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!

Lindberg

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+

moacirjava

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("codigo"));
                
        if(codigo!=0){
                Connection conn = null;
                PreparedStatement pst = null;
                ResultSet rs = null;
    ...            
    &lt;form action="EfetuaAtualizacao.jsp" method="post"&gt; //&lt;&lt;---- mandando para a página de 
            &lt;table&gt;                                                                   //atualização onde  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;" /&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;
e-cowboy

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!

moacirjava

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=?";
belcris

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!

<%             
        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!!!");
                }
      %>
Criado 27 de maio de 2008
Ultima resposta 25 de set. de 2008
Respostas 15
Participantes 4