1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Não consigo gravar no Banco

Gente, bom dia!

Estou estudando pela apostila da Caelum FJ21, sou iniciante, e estou com um problema. Não consigo gravar o contato no banco de dados. Quando clico em gravar no formulário HTML aparece a mensagem que o contato foi gravado com sucesso, mas quando verifico no banco não está lá. Gostaria de ajuda e desde já agradeço! Segue o código:

Conexão com o BD

// Conexão com o banco de dados
package br.com.caelum.jdbc;

import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Connection;

public class ConnectionFactory {


    public Connection getConnection() throws ClassNotFoundException {

        try {
            Class.forName("com.mysql.jdbc.Driver");
            return DriverManager.getConnection("jdbc:mysql://localhost/fj21",
                    "root", "123");
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

    }
}

Classe ContatoDAO

package br.com.caelum.jdbc.dao;

import java.sql.*;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import br.com.caelum.jdbc.ConnectionFactory;
import br.com.caelum.jdbc.modelo.Contato;

public class ContatoDAO {

    private Connection connection;

    public ContatoDAO() throws ClassNotFoundException {
        this.connection = new ConnectionFactory().getConnection();
    }

    // Método adiciona
    public void adciona(Contato contato) {

        String sql = "INSERT INTO CONTATOS"
                + " (NOME, EMAIL, ENDERECO, DATANASCIMENTO)"
                + " VALUES (?,?,?,?)";

        try {

            PreparedStatement stmt = connection.prepareStatement(sql);


            stmt.setString(1, contato.getNome());
            stmt.setString(2, contato.getEmail());
            stmt.setString(3, contato.getEndereco());
            stmt.setDate(4, new Date(contato.getDataNascimento()
                    .getTimeInMillis()));

            stmt.execute();

            stmt.close();

        } catch (SQLException e) {
            throw new RuntimeException(e);

        }
    } // Fim do método adiciona

    // Método litar contatos
    public List<Contato> getLista() {

        try {
            List<Contato> contatos = new ArrayList<Contato>();
            PreparedStatement stmt = this.connection
                    .prepareStatement("SELECT * FROM CONTATOS");

            ResultSet rs = stmt.executeQuery();

            while (rs.next()) {
                // Criar um objeto contato
                Contato contato = new Contato();
                contato.setId(rs.getLong("id"));
                contato.setNome(rs.getString("nome"));
                contato.setEmail(rs.getString("email"));
                contato.setEndereco(rs.getString("endereco"));

                // Montar a data
                Calendar data = Calendar.getInstance();
                data.setTime(rs.getDate("dataNascimento"));
                contato.setDataNascimento(data);

                // Add Contato a lista de Contatos
                contatos.add(contato);
            }

            rs.close();
            stmt.close();
            return contatos;

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

    } // Fim do método listar contatos

    // Método pesquisar por ID
    public Contato pesquisar(Integer id) {
        Contato contato = null;
        try {

            String sql = "SELECT * FROM CONTATOS WHERE ID = ?";
            PreparedStatement stmt = this.connection.prepareStatement(sql);

            stmt.setInt(1, id);

            ResultSet rs = stmt.executeQuery();

            while (rs.next()) {
                contato = new Contato();
                contato.setId(rs.getLong("id"));
                contato.setNome(rs.getString("nome"));
                contato.setEmail(rs.getString("email"));
                contato.setEndereco(rs.getString("endereco"));

                Calendar data = Calendar.getInstance();
                data.setTime(rs.getDate("dataNascimento"));
                contato.setDataNascimento(data);

            }

            rs.close();
            stmt.close();
            return contato;

        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

    } // Fim do método pesquisar

    // Método Alterar
    public void alterar(Contato contato) {

        String sql = "UPDATE CONTATOS SET NOME = ?, EMAIL = ?, ENDERECO = ?,"
                + " DATANASCIMENTO = ? WHERE ID = ?";

        try {
            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setString(1, contato.getNome());
            stmt.setString(2, contato.getEmail());
            stmt.setString(3, contato.getEndereco());
            stmt.setDate(4, new Date(contato.getDataNascimento()
                    .getTimeInMillis()));
            stmt.setLong(5, contato.getId());

            stmt.execute();
            stmt.close();
        } catch (SQLException e) {

            throw new RuntimeException(e);
        }
    } // Fim do Método Alterar

    //Método Excluir
    public void deletar(Contato contato){

        String sql = "DELETE FROM CONTATOS WHERE ID = ?";

        try {

            PreparedStatement stmt = connection.prepareStatement(sql);
            stmt.setLong(1, contato.getId());
            stmt.execute();
            stmt.close();
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

    } // Fim do método excluir
}

Classe Contato

package br.com.caelum.jdbc.modelo;

import java.util.Calendar;

public class Contato {

    private Long id;
    private String nome;
    private String email;
    private String endereco;
    private Calendar dataNascimento;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getEndereco() {
        return endereco;
    }

    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    public Calendar getDataNascimento() {
        return dataNascimento;
    }

    public void setDataNascimento(Calendar dataNascimento) {
        this.dataNascimento = dataNascimento;
    }

}

Servlet Adiciona Contato

package br.com.caelum.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.caelum.jdbc.dao.ContatoDAO;
import br.com.caelum.jdbc.modelo.Contato;

public class AdicionaContatoServlet extends HttpServlet {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    @Override
    protected void service(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        PrintWriter out = response.getWriter();

        // Pegando os parâmetros do request
        String nome = request.getParameter("nome");
        String email = request.getParameter("email");
        String endereco = request.getParameter("endereco");
        String dataEmTexto = request.getParameter("dataNascimento");
        Calendar dataNascimento = null;

        // Conversão das datas
        try {
            Date date = new SimpleDateFormat("dd/MM/yyyy").parse(dataEmTexto);
            dataNascimento = Calendar.getInstance();
            dataNascimento.setTime(date);
        } catch (ParseException e) {
            out.println("Erro na conversão da data");
            return; // Para execução do método
        }

        // Monta o objeto contato
        Contato contato = new Contato();
        contato.setNome(nome);
        contato.setEmail(email);
        contato.setEndereco(endereco);
        contato.setDataNascimento(dataNascimento);

        // Salva o contato
        ContatoDAO contatoDAO;
        try {
            contatoDAO = new ContatoDAO();
            contatoDAO.adciona(contato);
        } catch (ClassNotFoundException e) {

            e.printStackTrace();
        }

        // Imprime o contato adicionado

        out.println("<html>");
        out.println("<body>");
        out.println("Contato " + contato.getNome() + " adicionado com sucesso!");
        out.println("</body>");
        out.println("</html>");

    }

}

Formulário HTML para adicionar um contato

<html>
<body>
    <form action="adicionaContato">

        Nome: <input type="text" name="nome" /> </br> 
        E-mail: <input type="text" name="email" /> </br> 
        Endereço: <input type="text" name="endereco" /> </br>
        Data de Nascimento: <input type="text" name="dataNascimento" /> </br> 
        <input type="submit" value="Gravar" />

    </form>
</body>
</html>
  • Não deu nenhuma exceção na sua classe DAO não? Tente debugar isto aí..

    Fernando Werneck   22 de out de 2013
  • Verifica o driver do banco de dados onde tu coloca o usuário e senha para ver se o problema não está ali. No console não executou nenhuma exceção?

    Danilo Raulino de Liz   22 de out de 2013
  • Não ocorre nenhum exceção, a não ser quando deixo de colocar a data, que diz que o formato da data está incorreto. O usuário e senha estão certos, adicionei o driver do mysql ao projeto. Não sei porque está acontecendo isso. Testei a conexão e está Ok

    Raimundo Neto   22 de out de 2013
  • Debuga teu projeto começando pelo contatoDAO.adciona(contato); e vai acompanhando para ver até onde vai e se não perde o valor gravado no objeto.

    Danilo Raulino de Liz   22 de out de 2013
  • Danilo, debuguei e dá as seguites exceções, não da para colocar todas, mas essas são as principais java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:13) at br.com.caelum.jdbc.dao.ContatoDAO.(ContatoDAO.java:16) at br.com.caelum.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:58)

    Raimundo Neto   22 de out de 2013
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags java-ee banco-de-dados ou faça a sua própria pergunta.