Olá Pessoal!
Estou fazendo um cadastro para lançamento em conta corrente (débito e crédito). O sistema não consegue pegar o índice da chave estrangeira “o código da conta”.
Segue abaixo descrito as classes, arquivos e erros:
log do NetBeans:
java.lang.NumberFormatException: null at java.lang.Integer.parseInt(Integer.java:454) at java.lang.Integer.parseInt(Integer.java:527) at org.apache.jsp.tag.web.listaContasSelect_tag.doTag(listaContasSelect_tag.java:86) at org.apache.jsp.lancamento_jsp._jspx_meth_tagsJairo_005flistaContasSelect_005f0(lancamento_jsp.java:186) at org.apache.jsp.lancamento_jsp._jspService(lancamento_jsp.java:99) at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859) at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579) at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555) at java.lang.Thread.run(Thread.java:722)
- No browser:
HTTP Status 500 - type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: An exception occurred processing JSP page /lancamento.jsp at line 31
28: label for=“lanconcred”>Credito: 29: input type=“text” name=“lanconcred” id=“lanconcred” required /> 30: select name=“selectConta” id=“selectConta”> 31: tagsJairo:listaContasSelect/> 32: select> 33: div>br> 34: div class=“campos”>
Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:401) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) root cause javax.servlet.ServletException: javax.servlet.jsp.JspException: java.lang.NumberFormatException: null org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:858) org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:791) org.apache.jsp.lancamento_jsp._jspService(lancamento_jsp.java:131) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) root cause java.lang.NumberFormatException: null java.lang.Integer.parseInt(Integer.java:454) java.lang.Integer.parseInt(Integer.java:527) org.apache.jsp.tag.web.listaContasSelect_tag.doTag(listaContasSelect_tag.java:86) org.apache.jsp.lancamento_jsp._jspx_meth_tagsJairo_005flistaContasSelect_005f0(lancamento_jsp.java:186) org.apache.jsp.lancamento_jsp._jspService(lancamento_jsp.java:99) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:377) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:717) org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) note The full stack trace of the root cause is available in the Apache Tomcat/6.0.26 logs.
Pagina JSP:
%@page import="br.com.jairo.modelo.Lancamentos"%>
%@page import="java.util.Iterator"%>
%@page import="java.util.List"%>
%@page contentType="text/html" pageEncoding="UTF-8"%>
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
%@taglib tagdir="/WEB-INF/tags" prefix="tagsJairo" %>
tagsJairo:verificaSessao/>
c:import url="cabecalho.jsp"/>
form id="formLancamento" method="post" action="LancamentoCRUD">
h1>Novo Lancamento/h1>
div class="campos">
label for="lancodigo">Codigo:/label>
input type="text" name="lancodigo" id="lancodigo" disabled />
</div><br>
div class="campos">
label for="landata">Data:/label>
input type="date" name="landata" id="landata" placeholder="dd/mm/aaaa" pattern="[0][9]{2}/[0][9]{2}/[0][9]{4}" onkeypress="formataMascara(this,'##/##/####'); return Numero(event);" size="10" maxlength="10" required value="${param.landata}" />
</div><br>
div class="campos">
label for="lanconcred">Credito:/label>
input type="text" name="lanconcred" id="lanconcred" required />
select name="selectConta" id="selectConta">
tagsJairo:listaContasSelect/>
</select>
</div><br>
div class="campos">
label for="lancondeb">Debito:</label>
input type="text" name="lancondeb" id="lancondeb" required value="${param.lancondeb}" />
</div><br>
div class="campos">
label for="lanvalor">Valor:</label>
input type="text" name="lanvalor" id="lanvalor" required value="${param.lanvalor}" />
</div><br>
div class="campos">
label for="lanhistorico">Historico:</label>
input type="text" name="lanhistorico" id="lanhistorico" required size="100" maxlength="100" value="${param.lanhistorico}" />
</div><br>
input type="submit" name="acao" value="novo" />
</form>
<c:import url="rodape.jsp"/>
JSTL:
<%@tag body-content="empty" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<jsp:useBean id="beanConta" class="br.com.jairo.dao.ContaDAO"></jsp:useBean>
<c:set var="contador" value="${0}"></c:set>
<%
String selected = "";
java.util.List listaDeContas = (java.util.List) beanConta.getListaContaCombo();
for (java.util.Iterator iterator = listaDeContas.iterator(); iterator.hasNext();) {
br.com.jairo.modelo.Contas contas = (br.com.jairo.modelo.Contas) iterator.next();
int conCodigo = contas.getConCodigo();
String conDescricao = contas.getConDescricao();
if(conCodigo == Integer.parseInt(request.getParameter("concodigo")))
selected = "selected";
else
selected = "";
out.println("<option value="+conCodigo+" "+selected+">"+conDescricao+"</option>");
}
%>
Servlet
package br.com.jairo.controle;
import br.com.jairo.dao.LancamentoDAO;
import br.com.jairo.modelo.Lancamentos;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* @author Jairo
*/
public class LancamentoCRUD extends HttpServlet {
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, ParseException, SQLException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
RequestDispatcher rd = null;
String lanCodigo = request.getParameter("lancodigo");
String lanData = request.getParameter("landata");
String lanConCred = request.getParameter("lanconcred");
String lanConDeb = request.getParameter("lancondeb");
String lanValor = request.getParameter("lanvalor");
String lanHistorico = request.getParameter("lanhistorico");
Lancamentos lancamentos = new Lancamentos();
if (lanCodigo != null) {
lancamentos.setLanCodigo(Integer.parseInt(lanCodigo));
}
DateFormat formatoData = new SimpleDateFormat("dd/MM/yyyy");
if(lanData != null){
Date lanDataFormatada = formatoData.parse(lanData);
lancamentos.setLanData(lanDataFormatada);
}
if(lanConCred != null){
lancamentos.setLanConCred(Integer.parseInt(lanConCred));
}
if(lanConDeb != null){
lancamentos.setLanConDeb(Integer.parseInt(lanConDeb));
}
if(lanValor != null){
lancamentos.setLanValor(Double.parseDouble(lanValor));
}
lancamentos.setLanHistorico(lanHistorico);
LancamentoDAO lancamentoDAO = new LancamentoDAO();
//Verificar qual é a ação
String acao = request.getParameter("acao");
if (acao == null) {
acao = "listarLancamento";
}
if (acao.equals("alterar")) {
//contaDAO.alteraConta(contas);
//rd = request.getRequestDispatcher("/ContaCRUD?acao=listarConta");
} else if (acao.equals("excluir")) {
//contaDAO.excluiConta(contas);
//rd = request.getRequestDispatcher("/ContaCRUD?acao=listarConta");
} //else if (acao.equals("listarConta")) {
//int numPagina = 1;
//if (request.getParameter("numpagina") != null) {
//numPagina = Integer.parseInt(request.getParameter("numpagina"));
//}
else if (acao.equals("novo")) {
lancamentoDAO.novoLancamento(lancamentos);
rd = request.getRequestDispatcher("/index.jsp");
}
rd.forward(request, response);
}
// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
/**
* Handles the HTTP <code>GET</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (ParseException ex) {
Logger.getLogger(LancamentoCRUD.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(LancamentoCRUD.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* Handles the HTTP <code>POST</code> method.
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
processRequest(request, response);
} catch (ParseException ex) {
Logger.getLogger(LancamentoCRUD.class.getName()).log(Level.SEVERE, null, ex);
} catch (SQLException ex) {
Logger.getLogger(LancamentoCRUD.class.getName()).log(Level.SEVERE, null, ex);
}
}
/**
* Returns a short description of the servlet.
* @return a String containing servlet description
*/
@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>
}
- LancamentoDAO
package br.com.jairo.dao;
import br.com.jairo.fabrica.FabricaConexao;
import br.com.jairo.modelo.Lancamentos;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Date;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Jairo
*/
public class LancamentoDAO {
private Connection connection;
public LancamentoDAO() {
this.connection = new FabricaConexao().getConnection();
}
//metodo para incluir lancamento
public void novoLancamento(Lancamentos lancamentos) throws SQLException {
String sql = "insert into lancamentos (landata, lanconcred, lancondeb,lanvalor,lanhistorico) values (?,?,?,?,?)";
PreparedStatement ps = null;
try {
ps = connection.prepareStatement(sql);
ps.setDate(1, new java.sql.Date(lancamentos.getLanData().getTime()));
ps.setInt(2, lancamentos.getLanConCred());
ps.setInt(3, lancamentos.getLanConDeb());
ps.setDouble(4, lancamentos.getLanValor());
ps.setString(5, lancamentos.getLanHistorico());
ps.execute();
} catch (SQLException ex) {
Logger.getLogger(LancamentoDAO.class.getName()).log(Level.SEVERE, null, ex);
} finally {
connection.close();
ps.close();
}
}
}
- ContaDAO
package br.com.jairo.dao;
import br.com.jairo.fabrica.FabricaConexao;
import br.com.jairo.modelo.Contas;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
*
* @author Jairo
*/
public class ContaDAO {
private Connection connection;
public ContaDAO() {
this.connection = new FabricaConexao().getConnection();
}
//exibe contas cadastradas no sistema, paginado
public List getListaContaPaginado(int pagina, String ordenacao, String pesquisa, String campopesquisa) throws SQLException {
int limite = 5;
String sql = "";
int offset = (pagina * limite) - limite;
if (campopesquisa.equals("tipocodigo")) {
if (pesquisa.equals("")) {
sql = "select * from contas where " + campopesquisa + " > 0 order by " + ordenacao + " LIMIT 5 OFFSET " + offset;
} else {
sql = "select * from contas where " + campopesquisa + " = " + pesquisa + " order by " + ordenacao + " LIMIT 5 OFFSET " + offset;
}
} else {
sql = "select * from contas where " + campopesquisa + " like '%" + pesquisa + "%' order by " + ordenacao + " LIMIT 5 OFFSET " + offset;
}
PreparedStatement ps = null;
ResultSet rs = null;
List<Contas> listaContas = new ArrayList<Contas>();
try {
ps = connection.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
Contas contas = new Contas();
contas.setConCodigo(rs.getInt("conCodigo"));
contas.setConDescricao(rs.getString("conDescricao"));
contas.setTipoCodigo(rs.getInt("tipocodigo"));
contas.setConSaldo(rs.getDouble("conSaldo"));
listaContas.add(contas);
}
return listaContas;
} catch (SQLException erro) {
Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, erro);
} finally {
//connection.close();
//ps.close();
//rs.close();
}
return null;
}
//metodo para excluir conta
public boolean excluiConta(Contas contas) throws SQLException {
String sql = "delete from contas where concodigo=?";
PreparedStatement ps = null;
try {
ps = connection.prepareStatement(sql);
ps.setInt(1, contas.getConCodigo());
ps.execute();
return true;
} catch (SQLException ex) {
Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, ex);
} finally {
connection.close();
ps.close();
}
return false;
}
//metodo para atualizar conta
public void alteraConta(Contas contas) throws SQLException {
String sql = "update contas set condescricao=?,tipocodigo=?,consaldo=? where concodigo=?";
PreparedStatement ps = null;
try {
ps = connection.prepareStatement(sql);
ps.setString(1, contas.getConDescricao());
ps.setInt(2, contas.getTipoCodigo());
ps.setDouble(3, contas.getConSaldo());
ps.setInt(4, contas.getConCodigo());
ps.execute();
} catch (SQLException ex) {
Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, ex);
} finally {
connection.close();
ps.close();
}
}
//metodo para incluir conta
public void novaConta(Contas contas) throws SQLException {
String sql = "insert into contas (condescricao,tipocodigo,consaldo) values (?,?,?)";
PreparedStatement ps = null;
try {
ps = connection.prepareStatement(sql);
ps.setString(1, contas.getConDescricao());
ps.setInt(2, contas.getTipoCodigo());
ps.setDouble(3, contas.getConSaldo());
ps.execute();
} catch (SQLException ex) {
Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, ex);
} finally {
connection.close();
ps.close();
}
}
//metodo para retornar o numero de registros na paginação
public String totalRegistros(String pesquisa, String campopesquisa) throws SQLException {
PreparedStatement psConta = null;
ResultSet rsConta = null;
String sqlConta = "";
try {
if (campopesquisa.equals("concodigo")) {
if (pesquisa.equals("")) {
sqlConta = "select count(*) as contaRegistros from contas where " + campopesquisa + " > 0";
} else {
sqlConta = "select count(*) as contaRegistros from contas where " + campopesquisa + " = " + pesquisa;
}
} else {
sqlConta = "select count(*) as contaRegistros from contas where " + campopesquisa + " like '%" + pesquisa + "%'";
}
psConta = connection.prepareStatement(sqlConta);
rsConta = psConta.executeQuery();
rsConta.next();
String qtdTotalRegistros = rsConta.getString("contaRegistros");
return qtdTotalRegistros;
} catch (SQLException ex) {
Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, ex);
} finally {
connection.close();
psConta.close();
rsConta.close();
}
return null;
}
//lista contas cadastradas no sistema
public List getListaContaCombo() throws SQLException {
String sql = "select * from contas order by condescricao";
PreparedStatement ps = null;
ResultSet rs = null;
List<Contas> listaContas = new ArrayList<Contas>();
try {
ps = connection.prepareStatement(sql);
rs = ps.executeQuery();
while (rs.next()) {
Contas contas = new Contas();
contas.setConCodigo(rs.getInt("conCodigo"));
contas.setConDescricao(rs.getString("ConDescricao"));
listaContas.add(contas);
}
return listaContas;
} catch (SQLException erro) {
Logger.getLogger(ContaDAO.class.getName()).log(Level.SEVERE, null, erro);
} finally {
//connection.close();
//ps.close();
//rs.close();
}
return null;
}
}
- LancamentoModel
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.jairo.modelo;
import java.util.Date;
/**
*
* @author Jairo
*/
public class Lancamentos {
private int lanCodigo;
private Date lanData;
private int lanConCred;
private int lanConDeb;
private double lanValor;
private String lanHistorico;
/**
* @return the lanCodigo
*/
public int getLanCodigo() {
return lanCodigo;
}
/**
* @param lanCodigo the lanCodigo to set
*/
public void setLanCodigo(int lanCodigo) {
this.lanCodigo = lanCodigo;
}
/**
* @return the lanData
*/
public Date getLanData() {
return lanData;
}
/**
* @param lanData the lanData to set
*/
public void setLanData(Date lanData) {
this.lanData = lanData;
}
/**
* @return the lanConCred
*/
public int getLanConCred() {
return lanConCred;
}
/**
* @param lanConCred the lanConCred to set
*/
public void setLanConCred(int lanConCred) {
this.lanConCred = lanConCred;
}
/**
* @return the lanConDeb
*/
public int getLanConDeb() {
return lanConDeb;
}
/**
* @param lanConDeb the lanConDeb to set
*/
public void setLanConDeb(int lanConDeb) {
this.lanConDeb = lanConDeb;
}
/**
* @return the lanValor
*/
public double getLanValor() {
return lanValor;
}
/**
* @param lanValor the lanValor to set
*/
public void setLanValor(double lanValor) {
this.lanValor = lanValor;
}
/**
* @return the lanHistorico
*/
public String getLanHistorico() {
return lanHistorico;
}
/**
* @param lanHistorico the lanHistorico to set
*/
public void setLanHistorico(String lanHistorico) {
this.lanHistorico = lanHistorico;
}
}
Obs.: Será se devo criar um DAO para lancamentos de débitos e outro para créditos, e criar um MODEL para contaCredito e outro para contaDébito?
Se sim então devo criar mais tabelas para cadastro de contas, ou seja uma tabela contacreito e outro contacréidto?