Erro ao fazer o banco mysql alterar os dados pela jsp [RESOLVIDO]

4 respostas
G

:? Galera, estou tendo problemas quando vou alterar os dados pela jsp... Quando eu escolho o item q quero alterar ele vai pro controle certinho e joga a jsp com os campos todos, só que quando eu altero algo e aperto alterar dá um erro!!!

Desde já muito grato pela ajuda!!!!

[color=red]type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

java.lang.NumberFormatException: null
java.lang.Integer.parseInt(Unknown Source)
java.lang.Integer.(Unknown Source)
controle.ControleImpressoraAt.doPost(ControleImpressoraAt.java:24)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.30 logs.
[/color]
O código abaixo é o DaoImpressora:

public void update(Impressora i) throws Exception {

		open();

		stmt = con.prepareStatement("UPDATE IMPRESSORA SET " + " NOME=?, MARCA=?, MODELO=?, CONEXAO=? " + " WHERE IDIMPRESSORA=?");

		stmt.setString(1, i.getNome());
		stmt.setString(2, i.getMarca());
		stmt.setString(3, i.getModelo());
		stmt.setString(4, i.getConexao());
		stmt.setInt(5, i.getIdimpressora());
		
		
		stmt.execute();
		stmt.close();
		close();
	}

O código abaixo é da jsp:

<h3> Cadastro de Impressora </h3>
        <form name="form2" method="post" action="ControleImpressoraAt">
        	<table>
        	<%@ page import="entity.*,persistence.ImpressoraDao" %>
        	<% 
        		String acao = request.getParameter("action");
        		Integer cod = new Integer(request.getParameter("cod"));
        		Impressora i = new Impressora();
        		ImpressoraDao impd = new ImpressoraDao();
        		i = (Impressora) impd.findById(cod);
        		
        		out.print("<tr>");
            		out.print("<td>Id da impressora no banco: " + "</td>" + "<td> <input name=nome size='20'  readonly value='"+i.getIdimpressora()+"'/></td>");
            	out.print("</tr>");
        		
        		out.print("<tr>");
                	out.print("<td>Nome da Impressora na Intranet: " + "</td>" + "<td> <input name=nome size='20' value='"+i.getNome()+"'/></td>");
                out.print("</tr>");
                
                out.print("<tr>");
            		out.print("<td>Marca da Impressora: " + "</td>" + "<td> <input name=marca size='20' value='"+i.getMarca()+"'/></td>");
            	out.print("</tr>");
            	
            	out.print("<tr>");
        			out.print("<td>Modelo da Impressora: " + "</td>" + "<td> <input name=modelo size='20' value='"+i.getModelo()+"'/></td>");
        		out.print("</tr>");
        		
        		out.print("<tr>");
        		out.print("<td> Conexão da Impressora: " + "</td>" + "<td> <select name=conexao>" + "<option value=''>" + "'" + i.getConexao() + "'" + "</option>" + "<option value=USB> USB </option>" + "<option value=Rede> Rede </option>" + "</select>" + "</td>" + "</tr>");%>
                
                <tr>
                	<td> <br/> <input id="botao" type="button" value="Alterar Impressora" onclick="validaImpressora()"/> </td>
                    <td> <br/> <input id="botao" type="reset" value="Limpar"/> </td>
                </tr>
                <tr>
                    <td colspan="2"> <br/> <el> ${mensagem} </el> </td>
                </tr>
          
            </table>

Esse aqui é o metodo que coloquei na própria jsp pra filtrar erros de campos como colocar poucas letras nos campos. Depois de passado por esse método aí sim ele vai pro controle:

<script type="application/javascript">

	function validaImpressora()
	{
		f = document.form2;
		
		if (f.nome.value.length < 3){
			alert("O campo 'NOME' deve conter pelo menos 3 caracteres");
			f.nome.focus();
		} else if(f.marca.value.length < 2){
			alert("O campo 'MARCA' deve conter pelo menos 2 caracteres");
			f.marca.focus();
		} else if(f.modelo.value.length < 2){
			alert("O campo 'MODELO' deve conter pelo menos 2 caracteres");
			f.modelo.focus();
		} else if(f.conexao.value.length == ""){
			alert("Selecione o tipo de conexão para a impressora");
			f.conexao.focus();
		} else{
			f.submit();
		}
	}
    
    </script>

Esse é do controle:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Impressora i = new Impressora(new Integer(request.getParameter("idimpressora")), request.getParameter("nome"), request.getParameter("marca"),
					request.getParameter("modelo"),
					request.getParameter("conexao")   
                 );
try{
ImpressoraDao impd = new ImpressoraDao();
impd.update(i);
request.setAttribute("mensagem","Dados Alterados");	
	
}catch(Exception e){
request.setAttribute("mensagem",e.getMessage());
}

request.getRequestDispatcher("cadastroimpressora.jsp").
                           forward(request,response);
}

4 Respostas

romarcio

Parece que o erro é aqui:

Impressora i = new Impressora(new Integer(request.getParameter("idimpressora")),

Cria uma variável e faz a conversão de string para int.

int idImpressora= Integer.parseInt(request.getParameter("idimpressora"));
G

Romarcio, mas lá na classe impressora, eu declarei o idimpressora como integer, logo não consigo fazer o parse que vc disse acima, pois seria como fazê-lo de Integer para Integer.
O estranho é que todas as funcionalidades de deletar, incluir estão funcionando só o alterar que está dando erro.

jokacwb

Cara esse request.getParameter(“idimpressora”)
ta retornando null por isso o erro de NumberFormatException: null

Acho que o problema está na linha 13 do jsp, note que o atributo name esta como “nome”
e vc repete isso na linha 17, acho q na linha 13 vc deveria trocar
de:

out.print("<td>Id da impressora no banco: " + "</td>" + "<td> <input name=nome size='20'  readonly value='"+i.getIdimpressora()+"'/></td>");

para

out.print("<td>Id da impressora no banco: " + "</td>" + "<td> <input name=idimpressora  readonly value='"+i.getIdimpressora()+"'/></td>");
G

Jokacwb, eu ia colocar esse assunto como resolvido, pois tinha descoberto o problema e era esse mesmo, como eu tinha copiado a linha do nome para fazer o do id eu esqueci de trocar por id… Mas mesmo assim muito obrigado pela resposta… fica com Deus e sucesso!!!

Ahhh e obrigado tbm para o Romarcio.

Criado 21 de abril de 2011
Ultima resposta 26 de abr. de 2011
Respostas 4
Participantes 3