Sei que este erro indica que algum atributo está sendo definido como nulo , mas não encontrei o problema no código.
packagebr.com.caelum.servlet;importjava.io.IOException;importjava.io.PrintWriter;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassAdicionaContatoServletextendsHttpServlet{@Overrideprotectedvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{PrintWriterout=response.getWriter();Stringnome=request.getParameter("nome");Stringendereco=request.getParameter("endereco");Stringemail=request.getParameter("email");StringdataEmTexto=request.getParameter("dataNascimento");CalendardataNascimento=Calendar.getInstance();try{Datedate=newSimpleDateFormat("dd/MM/yyyy").parse(dataEmTexto);dataNascimento=Calendar.getInstance();dataNascimento.setTime(date);}catch(ParseExceptione){out.println("Erro de conversão da data");return;// para a execução do método}Contatoc1=newContato();c1.setNome(nome);c1.setEmail(email);c1.setEndereco(endereco);c1.setDataDeNascimento(dataNascimento);ContatoDAOdao=newContatoDAO();dao.adicionar(c1);out.println("<html>");out.println("<body>");out.println("Contato "+c1.getNome()+" adicionado com sucesso");out.println("</body>");out.println("</html>");}}
Pelo que entendi o problema deve ser ali na parte de trabalhar com as datas...
Bota a sua JSP ai, onde você está digitando os dados.
[]'s
C
CaioIncau
Então , estou seguindo os exercicios propostos pela fj-21 e ainda não foi criado nenhum JSP.
Esta servlet esta interagindo com um form de HTML.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><body><formaction="adicionaContato">
Nome: <inputtype="text"name="nome"/><br/>
E-mail: <inputtype="text"name="email"/><br/>
Endereço: <inputtype="text"name="endereco"/><br/>
Data Nascimento: <inputtype="text"name="dataNascimento"/><br/><inputtype="submit"value="Gravar"/></form></body></html>
getAdicted
CaioIncau:
Então , estou seguindo os exercicios propostos pela fj-21 e ainda não foi criado nenhum JSP.
Esta servlet esta interagindo com um form de HTML.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><body><formaction="adicionaContato">
Nome: <inputtype="text"name="nome"/><br/>
E-mail: <inputtype="text"name="email"/><br/>
Endereço: <inputtype="text"name="endereco"/><br/>
Data Nascimento: <inputtype="text"name="dataNascimento"/><br/><inputtype="submit"value="Gravar"/></form></body></html>
Correto,
Então você vai fazer o seguinte:
1 - Crie um diretório dentro de WEB-INF chamado tags.
2 - Dentro do diretório tags, crie um arquivo chamado campoData.tag e insira o seguinte cógido:
<!--Tochangethistemplate,chooseTools|Templatesandopenthetemplateintheeditor.--><!DOCTYPEHTMLPUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"><%@tagliburi="http://java.sun.com/jsp/jstl/core"prefix="c"%><%@taglibtagdir="/WEB-INF/tags"prefix="caelum"%><c:importurl="cabecalho.jsp"/><head><title></title><metahttp-equiv="Content-Type"content="text/html; charset=UTF-8"></head><formaction="adicionaContato">Nome:<inputtype="text"name="nome"/><br/>E-mail:<inputtype="text"name="email"/><br/>Endereco:<inputtype="text"name="endereco"/><br/>DataNascimento:<caelum:campoDataid="dataNascimento"/><br/><inputtype="submit"value="Gravar"/></form><c:importurl="rodape.jsp"/>
Testa e qualquer coisa, avisa! :)
[]'s
Rodrigo_Sasaki
que valor está vindo na sua variável dataEmTexto na hora de chamar o método parse() do SimpleDateFormat ?
C
CaioIncau
Dei uma editada e agora o problema mudou...
A questão das datas era que em no DAO estava como dataDeNascimento e nao dataNascimento.
Ja foi arrumado.
mas agora surgiu outro problema.
Pelo o que eu entendi ele não esta encontrando o driver do MySQL, mas eu ja adicionei ele ao ClassPath e copiei para a pasta Lib do TomCat
Aonde você cria a conexão com o banco de dados? Mostre pra gente o método.
Se você estiver usando JDBC 3 você precisa “declarar” o driver que está usando via Class.forName()
C
CaioIncau
Estou usando um Connection Factory
packagebr.com.caelum.servlet;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassConnectionFactory{publicConnectiongetConnection(){System.out.println("Conectando ao Banco de Dados ");try{returnDriverManager.getConnection("jdbc:mysql://localhost/fj21","root","");}catch(SQLExceptione){thrownewRuntimeException(e);}}}
Rodrigo_Sasaki
Tente deixar assim
packagebr.com.caelum.servlet;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassConnectionFactory{publicConnectiongetConnection(){System.out.println("Conectando ao Banco de Dados ");try{Class.forName("com.mysql.jdbc.Driver");// Adicionei essa linha.returnDriverManager.getConnection("jdbc:mysql://localhost/fj21","root","");}catch(SQLExceptione){thrownewRuntimeException(e);}}}
getAdicted
CaioIncau:
Estou usando um Connection Factory
packagebr.com.caelum.servlet;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassConnectionFactory{publicConnectiongetConnection(){System.out.println("Conectando ao Banco de Dados ");try{returnDriverManager.getConnection("jdbc:mysql://localhost/fj21","root","");}catch(SQLExceptione){thrownewRuntimeException(e);}}}
Olha essa aqui, veja se ajuda:
packagecaelum;/* * To change this template, choose Tools | Templates * and open the template in the editor. *//** * * @author House *//* Conexao.java */importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassConexao{privatestaticfinalStringDATABASE_DRIVER="com.mysql.jdbc.Driver";privatestaticfinalStringDATABASE="mysql";privatestaticfinalStringDATABASE_IP="localhost";privatestaticfinalshortDATABASE_PORT=3306;privatestaticfinalStringDATABASE_NAME="fj21";privatestaticfinalStringDATABASE_URL="jdbc:"+DATABASE+"://"+DATABASE_IP+":"+DATABASE_PORT+"/"+DATABASE_NAME;privatestaticfinalStringDATABASE_USER="user";privatestaticfinalStringDATABASE_PASS="senha";publicstaticConnectiongetConnection()throwsSQLException,ClassNotFoundException{Connectioncon=null;Class.forName(DATABASE_DRIVER);con=DriverManager.getConnection(DATABASE_URL,DATABASE_USER,DATABASE_PASS);returncon;}}
[]'s
C
CaioIncau
Class.forName(“com.mysql.jdbc.Driver”);
Ao adicionar esta linha ao meu código está dando erro.
Ai adicionei o throws SQLException, ClassNotFoundException
Como o do Exemplo do Addicted
Pelo que sei a única coisa que fiz foi permitir que o erro continue lá e me avise .
packagebr.com.caelum.servlet;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassConnectionFactory{publicConnectiongetConnection()throwsSQLException,ClassNotFoundException{System.out.println("Conectando ao Banco de Dados ");try{Class.forName("com.mysql.jdbc.Driver");returnDriverManager.getConnection("jdbc:mysql://localhost/fj21","root","");}catch(SQLExceptione){thrownewRuntimeException(e);}}}
Rodrigo_Sasaki
O erro na console diz que você está lançando exceções mas não está tratando, se quiser tratá-las, use um bloco try/catch.
Edit: experimente removê-las do throws
C
CaioIncau
Com try e Catch o erro continua o mesmo No suitable driver found for jdbc:mysql://localhost/fj21…
Sem throw não compila.
Rodrigo_Sasaki
CaioIncau:
Com try e Catch o erro continua o mesmo No suitable driver found for jdbc:mysql://localhost/fj21…
Sem throw não compila.
se você colocar no throws, quem chamar seu método terá que tratá-lo, você olhou as classes que chamam seu método?
para evitar isso, sendo que não faria sentido sua ConnectionFactory lançar para quem o chama a exceção, trate a mesma dentro do seu bloco try-catch
se você não tratar a exceção realmente não vai compilar, mas retire do throws e coloque no seu bloco try-catch.
C
CaioIncau
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
o jar está na build path do seu projeto?
e qual o nome do seu jar, com versão e tudo mais?
C
CaioIncau
O jar esta no buildpath, cliquei em import external archive e selecionei o driver.
Ai então cliquei com o direito e dei add to build path
mysql-connector-java-5.1.18-bin
Este é o nome do Driver
a classe esta assim
packagebr.com.caelum.servlet;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassConnectionFactory{publicConnectiongetConnection(){System.out.println("Conectando ao Banco de Dados ");try{try{Class.forName("com.mysql.jdbc.Driver");}catch(ClassNotFoundExceptione){// TODO Auto-generated catch blocke.printStackTrace();}returnDriverManager.getConnection("jdbc:mysql://localhost/fj21","root","");}catch(SQLExceptione){thrownewRuntimeException(e);}}}
Rodrigo_Sasaki
packagebr.com.caelum.servlet;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassConnectionFactory{publicConnectiongetConnection(){System.out.println("Conectando ao Banco de Dados ");try{Class.forName("com.mysql.jdbc.Driver");returnDriverManager.getConnection("jdbc:mysql://localhost/fj21","root","");}catch(SQLExceptione){thrownewRuntimeException(e);}}
Tente assim
C
CaioIncau
Unhadled exception type ClassNotFoundException
Aviso lateral de erro avisando que tem uma exception…
Como já fizemos com throw e try/catch, nem coloquei
Rodrigo_Sasaki
você está desenvolvendo em alguma IDE, por exemplo o eclipse?
ele sublinha com vermelho te pedindo pra tratar mais exceções? a idéia é tratar todas no mesmo bloco try-catch…
diferente de como estava seu código
packagebr.com.caelum.servlet;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassConnectionFactory{publicConnectiongetConnection(){System.out.println("Conectando ao Banco de Dados ");try{Class.forName("com.mysql.jdbc.Driver");returnDriverManager.getConnection("jdbc:mysql://localhost/fj21","root","");}catch(SQLExceptione){thrownewRuntimeException(e);}catch(ClassNotFoundExceptione1){thrownewRuntimeException(e1);}}}