[Resolvido] Erro ao gravar conteúdo do ComboBox no Banco de Dados

9 respostas
BtAquino

No sistema que estou fazendo para estudos, no meu cadastro o usuário através de um comboBox informa qual cidade pertence.

No como aparece para o usuário Cidade + Estado, por exemplo "São Paulo - SP".

Porém no momento de gravar no Banco de Dados, se grava o código da cidade do tipo Long, por exemplo, código 10.

No momento da gravação, acontece o seguinte erro:

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.Long.parseLong(Long.java:375)
	java.lang.Long.parseLong(Long.java:468)
	servlet.AdicionaCadastroServlet.processRequest(AdicionaCadastroServlet.java:70)
	servlet.AdicionaCadastroServlet.doGet(AdicionaCadastroServlet.java:96)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	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.35 logs.

O trecho da Servlet que corresponde ao trecho que grava no banco de dados, ficou dessa maneira:

public class AdicionaCadastroServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        PrintWriter out = response.getWriter();
       
        
        String idCidade = request.getParameter("idCidade");
        
        
        Cadastro novoCadastro = new Cadastro();
        
      
        novoCadastro.setIdCidade(Long.parseLong(idCidade));

        
        
        try {
            out.println("<html>");
            out.println("<body>");
            out.println("Cadastro" + novoCadastro.getNomeCadastro() + "adicionada com sucesso");
            out.println("</body>");
            out.println("</html>");
            
        } finally {            
            out.close();
        }
    }

CadastroDAO:

public void adicionar(Cadastro cadastro){
        
        String sql = "insert into cadastro (nomeCadastro, rg, ufRg, cpf, "
                + "endereco, bairro, dataCadastro, dataNascimento"
                + "telefone, celular, idCidade) values (?,?,?,?,?,?,?,?,?,?,?)";
        try{
            PreparedStatement stmt = conectar.prepareStatement(sql);
            stmt.setString(1, cadastro.getNomeCadastro());
            stmt.setString(2, cadastro.getRg());
            stmt.setString(3, cadastro.getUfRg());
            stmt.setString(4, cadastro.getCpf());
            stmt.setString(5, cadastro.getEndereco());
            stmt.setString(6, cadastro.getBairro());
            stmt.setDate(7, new Date(cadastro.getDataCadastro().getTimeInMillis()));
            stmt.setDate(8, new Date(cadastro.getDataNascimento().getTimeInMillis()));
            stmt.setString(9, cadastro.getTelefone());
            stmt.setString(10, cadastro.getCelular());
            stmt.setLong(11, cadastro.getIdCidade());
            stmt.execute();
            stmt.close();
            
        }catch(SQLException e){
            throw  new RuntimeException(e);
        }
        
    }

Alguém pode me ajudar?

Obrigado!

9 Respostas

BtAquino

cortei demais.

Antes do Try na classe de Servlet tem o trecho:

CadastroDAO dao = new CadastroDAO(); dao.adicionar(novoCadastro);

BtAquino

Alguém ?

Fiz todo o processo novamente, mas continua esbarrando no mesmo erro.
e não consigo dar continuidade.

Grato.

F
BtAquino:
No sistema que estou fazendo para estudos, no meu cadastro o usuário através de um comboBox informa qual cidade pertence.

No como aparece para o usuário Cidade + Estado, por exemplo "São Paulo - SP".

Porém no momento de gravar no Banco de Dados, se grava o código da cidade do tipo Long, por exemplo, código 10.

No momento da gravação, acontece o seguinte erro:

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.Long.parseLong(Long.java:375)
	java.lang.Long.parseLong(Long.java:468)
	servlet.AdicionaCadastroServlet.processRequest(AdicionaCadastroServlet.java:70)
	servlet.AdicionaCadastroServlet.doGet(AdicionaCadastroServlet.java:96)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	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.35 logs.

O trecho da Servlet que corresponde ao trecho que grava no banco de dados, ficou dessa maneira:

public class AdicionaCadastroServlet extends HttpServlet {

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        PrintWriter out = response.getWriter();
       
        
        String idCidade = request.getParameter("idCidade");
        
        
        Cadastro novoCadastro = new Cadastro();
        
      
        novoCadastro.setIdCidade(Long.parseLong(idCidade));

        
        
        try {
            out.println("<html>");
            out.println("<body>");
            out.println("Cadastro" + novoCadastro.getNomeCadastro() + "adicionada com sucesso");
            out.println("</body>");
            out.println("</html>");
            
        } finally {            
            out.close();
        }
    }

CadastroDAO:

public void adicionar(Cadastro cadastro){
        
        String sql = "insert into cadastro (nomeCadastro, rg, ufRg, cpf, "
                + "endereco, bairro, dataCadastro, dataNascimento"
                + "telefone, celular, idCidade) values (?,?,?,?,?,?,?,?,?,?,?)";
        try{
            PreparedStatement stmt = conectar.prepareStatement(sql);
            stmt.setString(1, cadastro.getNomeCadastro());
            stmt.setString(2, cadastro.getRg());
            stmt.setString(3, cadastro.getUfRg());
            stmt.setString(4, cadastro.getCpf());
            stmt.setString(5, cadastro.getEndereco());
            stmt.setString(6, cadastro.getBairro());
            stmt.setDate(7, new Date(cadastro.getDataCadastro().getTimeInMillis()));
            stmt.setDate(8, new Date(cadastro.getDataNascimento().getTimeInMillis()));
            stmt.setString(9, cadastro.getTelefone());
            stmt.setString(10, cadastro.getCelular());
            stmt.setLong(11, cadastro.getIdCidade());
            stmt.execute();
            stmt.close();
            
        }catch(SQLException e){
            throw  new RuntimeException(e);
        }
        
    }

Alguém pode me ajudar?

Obrigado!

cara ele é bem claro..

java.lang.NumberFormatException: null
o seu parametro idCidade está vindo nulo

como está o seu JSP?

BtAquino

Meu JSP

<%-- 
    Document   : adiciona-cadastro
    Created on : 13/03/2012, 21:02:19
    Author     : Administrador
--%>

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@taglib tagdir="/WEB-INF/tags" prefix="dt" %>
<!DOCTYPE html>
<c:import url="cabecalho.jsp" />
<jsp:useBean id= "dao" class = "dao.CidadeDAO"/>
<form action="AdicionaCadastro">
<fieldset>
  <legend>Cadastro Geral</legend>
  
<table>
  <tr>
    <td>Nome:</td>
    <td><input type="text" name="nomeCadastro" size="30"/></td>
  </tr>
  <tr>
    <td>RG:</td>
    <td><input type="text" name="rg" size="30"/></td>
  </tr>
    <tr>
    <td>UF RG:</td>
    <td><input type="text" name="ufRg" size="30"/></td>
  </tr>
  <tr>
    <td>CPF:</td>
    <td><input type="text" name="cpf" size="30"/></td>
  </tr>
    <tr>
    <td>Endereço:</td>
    <td><input type="text" name="endereco" size="30"/></td>
  </tr>
  <tr>
    <td>Bairro:</td>
    <td><input type="text" name="bairro" size="30"/></td>
  </tr>
    <tr>
    <td>Data Cadastro:</td>
    <td><input type="text" name="dataCadastro" size="30"/></td>
  </tr>
  <tr>
    <td>Data Nascimento:</td>
    <td><input type="text" name="dataNascimento" size="30"/></td>
  </tr>
   <tr>
    <td>Telefone:</td>
    <td><input type="text" name="telefone" size="30"/></td>
  </tr>
  <tr>
    <td>Celular:</td>
    <td><input type="text" name="celular" size="30"/></td>
  </tr>
    <tr>
    <td>Cidade:</td>
    <td> 
    <select name="cbCidade">      
     <c:forEach var="cidade" items="${dao.lista}">      
       <option value="${cidade.nomeCidade}">${cidade.nomeCidade} - ${cidade.uf}</option>      
     </c:forEach>      
    </select>
    </td>
  </tr>
  <tr>
    <td colspan="2"><input type="submit" value="Gravar"/></td>
  </tr>
    <tr>
        <td <li><a href="index.jsp">Voltar</a></td>
    </tr>
  
</table>
  
</fieldset>
              
        </form>
<c:import url="rodape.jsp" />
F

acho que o erro está aqui oh

<select name="cbCidade">        
     <c:forEach var="cidade" items="${dao.lista}">        
       <option value="${cidade.nomeCidade}">${cidade.nomeCidade} - ${cidade.uf}</option>        
     </c:forEach>        
    </select>

você tem que colocar o name do seu select para o nome do atributo que você está recebendo no seu servlet. no seu caso vc mudaria de cbCidade para idCidade.

BtAquino

Agora mudou o erro:

exception 

java.lang.NumberFormatException: For input string: "Maringá"
	java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
	java.lang.Long.parseLong(Long.java:410)
	java.lang.Long.parseLong(Long.java:468)
	servlet.AdicionaCadastroServlet.processRequest(AdicionaCadastroServlet.java:71)
	servlet.AdicionaCadastroServlet.doGet(AdicionaCadastroServlet.java:99)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Lembrando que o usuário seleciona a cidade, mas no banco grava o código da mesma.

Na classe servlet eu converto para Long.

Está erro a conversão?

F
<option value="${cidade.nomeCidade}">${cidade.nomeCidade} - ${cidade.uf}</option>

nessa linha mude o value para o id da cidade…

se estiver do jeito q eu penso, deveria está assim

invés de nomeCidade coloque idCidade

<option value="${cidade.idCidade}">${cidade.nomeCidade} - ${cidade.uf}</option>
BtAquino

Muito obrigado!

Deu certo resolveu meu problema.

F

vlw!

Criado 14 de março de 2012
Ultima resposta 15 de mar. de 2012
Respostas 9
Participantes 2