Estou estudando java web e estou tendo um problema… fiz uma conexão com postgres e criei uma classe para testar esta conexão funciona direitinho, inseri dados numa tabela de contatos até ai tudo bem, mas quando criei um formulário para inserir dados na tabela me ocorre um erro:
“HTTP Status 500 - java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost/caelum”
Não entendo como o driver não é encontrado ao inserir dados pelo formulário se quando eu testo a conexão ou até para inserir dados na mão mesmo pelo código funciona.
Estou usando o eclipse, será algo que esqueci de fazer?? Estou me familiarizando melhor agora com a IDE.
Provavelmente é problema de classpath. Se estiver rodando um código de testes, em uma classe qualquer e um método main por exemplo, basta o jar do driver do postgres estar no classpath, podendo estar em qualquer pasta do projeto, ou até fora.
Já para rodar o projeto como web, o driver precisa estar em WebContent/WEB-INF/lib. Verifique se está nessa pasta.
O driver está certinho dentro da lib como você mencionou fredericomaia10, ainda não consegui resolver vou postar um código pra ver se vocês encontram algum problema.
Abaixo está o servlet que é chamado ao clicar em cadastrar na página de formulário. Está tudo ok com está conversão de data?? Embora eu esteja estudando pela apostila da caelum fiz como esta lá.
/**
* Servlet implementation class AdicionaContatoServlet
*/
@WebServlet("/adicionaContato")
public class AdicionaContatoServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public AdicionaContatoServlet() {
super();
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
String nome = request.getParameter("nome");
String email = request.getParameter("email");
String endereco = request.getParameter("endereco");
String dataEmTexto = request.getParameter("dataNascimento");
Calendar dataNascimento = null;
try{
Date date = new SimpleDateFormat("dd/MM/yyy").parse(dataEmTexto);
dataNascimento = Calendar.getInstance();
dataNascimento.setTime(date);
}catch(ParseException e){
out.println("Erro de conversão da data!");
return;
}
//Cria um objeto contato
Contato contato = new Contato();
contato.setNome(nome);
contato.setEmail(email);
contato.setEndereco(endereco);
contato.setDataNascimento(dataNascimento);
//Salva o contato
ContatoDAO dao = new ContatoDAO();
dao.adiciona(contato);
//Imprime o nome do contato que foi adicionado
out.println("<html>");
out.println("<body>");
out.println("Contato: " + contato.getNome() + "adicionado com sucesso!");
out.println("</body>");
out.println("</html>");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
Abaixo está minha classe ConnectionFactory, não acredito que tenha algum problema aqui, mas…
package br.com.caelum.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
public Connection getConnection() {
try{
return DriverManager.getConnection("jdbc:postgresql://localhost/caelum", "postgres", "123456");
}catch(SQLException e){
throw new RuntimeException(e);
}
}
}
public Connection getConnection() {
try{
Class.forName("org.postgresql.Driver"); //nova linha necessaria para que o WebContainer (Tomcat) encontre a classe Driver JBDC do Postgres
return DriverManager.getConnection("jdbc:postgresql://localhost/caelum", "postgres", "123456");
}catch(SQLException e){
throw new RuntimeException(e);
}
}
}[/code]
Como você já copiou o arquivo JAR do JDBC na pasta lib, tudo deve funcionar com sucesso.