Ainda não tem acesso? Estude com a gente! Matricule-se
Ainda não tem acesso? Estude com a gente! Matricule-se

Solucionado (ver solução)

Erro ao inserir no Banco ( Null Pointer)

Galera tudo bem ? Estou desenvolvendo sistema para estudos seguindo a apostila da Caelum, eu testo a conexão com o banco de dados no método Main( ), e consigo inserir com exito, mas ao utilizar a Servlet da um exception.

Segue os codigos...

public class Gasto {

    private String nomeGasto;
    private BigDecimal valorDoGasto;
    private String dataVencimento;
    private String mesReferencia;
    private boolean status;

    public String getNomeGasto() {
        return nomeGasto;
    }

    public void setNomeGasto(String nomeGasto) {
        this.nomeGasto = nomeGasto;
    }

    public BigDecimal getValorDoGasto() {
        return valorDoGasto;
    }

    public void setValorDoGasto(BigDecimal valorDoGasto) {
        this.valorDoGasto = valorDoGasto;
    }

    public String getDataVencimento() {
        return dataVencimento;
    }

    public void setDataVencimento(String dataVencimento) {
        this.dataVencimento = dataVencimento;
    }

    public String getMesReferencia() {
        return mesReferencia;
    }

    public void setMesReferencia(String mesReferencia) {
        this.mesReferencia = mesReferencia;
    }

    public boolean getStatus() {
        return status;
    }

    public void setStatus(boolean status) {
        this.status = status;
    }

}
public class ConnectionFactory {

    public Connection getconnection() {

        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost/financeiro", "root", "root");
            return con;
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        }
        return null;

    }
}
public class GastoDAO {

    private Connection connection;

    public GastoDAO() {
        try {
            this.connection = new ConnectionFactory().getconnection();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void adiciona(Gasto gasto) {

        String sql = "insert into gastos"
                + "(nomeGasto, valorDoGasto, dataVencimento, mesReferencia,status)"
                + "values(?,?,?,?,?)";


        try {

            //prepared statement para inserção
            PreparedStatement stmt = connection.prepareStatement(sql);

            stmt.setString(1, gasto.getNomeGasto());
            stmt.setBigDecimal(2, gasto.getValorDoGasto());
            stmt.setString(3, gasto.getDataVencimento());
            stmt.setString(4, gasto.getMesReferencia());
//            stmt.setDate(3, Date.valueOf(gasto.getDataVencimento())); // http://respostas.guj.com.br/24591-localdate-e-jdbc
//            stmt.setDate(4, new Date(gasto.getMesReferencia().getTimeInMillis()));
            stmt.setBoolean(5, gasto.getStatus());


            //executa

            stmt.execute();
            stmt.close();
        } catch(SQLException e) {
            e.printStackTrace();
        }
    }
}
public class TesteGastoDAO {

    public static void main(String[] args) {

        Gasto gasto = new Gasto();

        // pronto para gravar

        gasto.setNomeGasto("Boleto");
        BigDecimal valorGasto = new BigDecimal("300.00");
        gasto.setValorDoGasto(valorGasto);

//        LocalDate dataVencimento = LocalDate.of(1990, 03, 02);
//        gasto.setDataVencimento(dataVencimento);
//        gasto.setMesReferencia(Calendar.getInstance());

        gasto.setDataVencimento("05/03/2018");
        gasto.setMesReferencia("Fevereiro / 2018");

        gasto.setStatus(true);
        // grave nessa conexao
        GastoDAO gastoDAO = new GastoDAO();

        gastoDAO.adiciona(gasto);

        System.out.println("Gravando");
    }
}
@WebServlet("/adicionarGasto")
public class AdicionarGasto extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

        String nomeGasto = req.getParameter("nomeGasto");

        String valorEmTexto = req.getParameter("valorDoGasto");
        BigDecimal valorDoGasto = new BigDecimal(valorEmTexto);

        String mesReferencia = req.getParameter("mesReferencia");
        String dataVencimento = req.getParameter("dataVencimento");
        String situacaoEmTexto = req.getParameter("situacao");

        Boolean situacao = new Boolean(situacaoEmTexto);


        // try {
        //
        // Date date = (Date) new SimpleDateFormat("dd/MM/yyyy").parse(dataEmTexto);
        // dataVencimento = Calendar.getInstance();
        // dataVencimento.setTime(date);
        //
        // } catch (java.text.ParseException e) {
        //
        // e.printStackTrace();
        //
        // }

        Gasto gasto = new Gasto();
        gasto.setNomeGasto(nomeGasto);
        gasto.setValorDoGasto(valorDoGasto);
        gasto.setMesReferencia(mesReferencia);
        gasto.setDataVencimento(dataVencimento);
        gasto.setStatus(situacao);

        GastoDAO gastoDAO = new GastoDAO();
        gastoDAO.adiciona(gasto);

        PrintWriter out = res.getWriter();

        out.println("<html>");
        out.println("<body>");
        out.println("Gasto " + gasto.getNomeGasto() + "Adicionado");
        out.println("</body>");
        out.println("</html>");

    }
}
5 respostas

E aqui segue a Exception:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1892)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1735)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at br.com.bruno.jdbc.ConnectionFactory.getconnection(ConnectionFactory.java:12)
    at br.com.bruno.DAO.GastoDAO.<init>(GastoDAO.java:20)
    at br.com.bruno.servlet.AdicionarGasto.service(AdicionarGasto.java:54)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)
abr 18, 2018 11:25:44 AM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [br.com.bruno.servlet.AdicionarGasto] in context with path [/controle-financeiro] threw exception
java.lang.NullPointerException
    at br.com.bruno.DAO.GastoDAO.adiciona(GastoDAO.java:36)
    at br.com.bruno.servlet.AdicionarGasto.service(AdicionarGasto.java:55)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Unknown Source)

Pelo:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

E por não poder ver seus imports, talvez tenha importado uma biblioteca errada, ou faltou alguma biblioteca. Seria a primeira coisa que eu veria.

Então Gabriel, ja verifiquei os imports e não esta relacionando a isto não...

solução

Verifica se o .jar do mysql connector está na pasta WEB-INF/lib. Depois com o botão direito do mouse seleciona a opção de adicionar ao classpath.

Espero ter ajudado.

Obrigado Cássio, realizei o add build path e funcionou !