Erro ao gravar no mysql com servlet

8 respostas
D
olha eu de novo, pessoal tenho uma pagina basica para inserir dados no mysql, quando clico em gravar ocorre um erro com o driver se é que entendi o erro. meu projeto fucniona normal com com uma classe de teste para inserir no banco, mas quando uso html+servlet da erro. Ja adicionei o driver com biul path, a variavel de ambiente ta ok tb, ja mapiei os objetos.... Olha o codigo ...
ERRO
Connect to database...
29/12/2010 16:23:46 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet AdicionaContatoServlet threw exception
java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
	at br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:11)
	at br.com.caelum.jdbc.dao.ContatoDAO.<init>(ContatoDAO.java:14)
	at br.com.caelum.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:49)
	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.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.Http11Processor.process(Http11Processor.java:857)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
	at java.sql.DriverManager.getConnection(Unknown Source)
	at java.sql.DriverManager.getConnection(Unknown Source)
	at br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:9)
	... 15 more



<html>
	<head>
		<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
		<title>Insert title here</title>
	</head>
	
<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 Nascimento: <input type="text" name="dataNascimento" /><br />
			<input type="submit" value="Gravar" />
		</form>
	</body>
</html>
package br.com.caelum.servlet;

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

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 {
	
	protected void service(HttpServletRequest request, HttpServletResponse response) 
							throws IOException, ServletException {
		PrintWriter out = response.getWriter();
		
		String nome = request.getParameter("nome");
		String endereco = request.getParameter("endereco");
		String email = request.getParameter("email");
		String dataEmTexto = request.getParameter("DataNascimento");
		
		Calendar dataNascimento = null;
		
		//Fazendo a conversão da data
		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; //Para a execução do método
		}
		
		//Mostra um objeto contato
		Contato contato = new Contato();
		contato.setNome(nome);
		contato.setEndereco(endereco);
		contato.setEmail(email);
		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>");
	}
}
Fabrica de conexão
package br.com.caelum.jdbc;
import java.sql.*;

public class ConnectionFactory {
	
	public Connection getConnection() {
		try {
			System.out.println("Connect to database...");
			return DriverManager.getConnection("jdbc:mysql://localhost/fj21", "root", "");
		} catch(SQLException sqlException) {
			throw new RuntimeException(sqlException);
		}
	}
}
objeto DAO
package br.com.caelum.jdbc.dao;
import java.sql.*;
import java.sql.Date;
import java.util.*;
import br.com.caelum.jdbc.ConnectionFactory;
import br.com.caelum.jdbc.modelo.Contato;

public class ContatoDAO {
	//Coneção com o banco de dados
	private Connection connection;
	
	//Fabrica a conexão com o banco mysql
	public ContatoDAO() {
		this.connection = new ConnectionFactory().getConnection();
	}
	
	public void adiciona(Contato contato) {
		String sql = "INSERT INTO contatos(nome, email, endereco, dataNascimento) VALUES(?,?,?,?)";
		
		try {
			//Objeto para Inserção no banco PreparedStatement passando a string sql
			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();
			System.out.println("Contato adicionado.");
		} catch(SQLException sqlException) {
			throw new RuntimeException(sqlException);
		}
	}
}
MEU WEB.XML
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>fj21-agenda1</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  
  
  <servlet>
    <servlet-name>servletOiMundo</servlet-name>
    <servlet-class>br.com.caelum.servlet.OiMundo</servlet-class>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>servletOiMundo</servlet-name>
    <url-pattern>/oi</url-pattern>
  </servlet-mapping>
  
  
  
  <servlet>
  	<servlet-name>AdicionaContatoServlet</servlet-name>
  	<servlet-class>br.com.caelum.servlet.AdicionaContatoServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>AdicionaContatoServlet</servlet-name>
  	<url-pattern>/adicionaContato</url-pattern>
  </servlet-mapping>
  
  
  
</web-app>

8 Respostas

J

Faaala garoto,
vc copiou o driver do mysql para dentro do lib do tomcat ?

Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
D

[quote=javajc]Faaala garoto,
vc copiou o driver do mysql para dentro do lib do tomcat ?

Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21

Eu tenho ele no meu projeto e no server, tenho que fazer algo mais ?

J

Certa vez tive o mesmo problema, então copiei o arquivo jar do mysql para dentro do diretório LIB do TomCat e resolveu !!

M

Oi, será que não esta faltando passar a porta do mysql?

seu codigo:

DriverManager.getConnection("jdbc:mysql://localhost/fj21", "root", "");

sugestão:

DriverManager.getConnection("jdbc:mysql://localhost:3306/fj21", "root", "");

D

fiz isso…
Eureca… vlw brother, mais uma vida salva

B

e ai galera…td beleza?

eu tambem estava tendo o mesmo problema…usando o mesmo mysql connector num projecto desktop deu certo mas no projecto web nao deu…e ai o que eu fiz??

baixei a ultima versao do mysql connector (5.1.16) e funcionou…

N

estou com exato mesmo problema, até o projeto é o mesmo, copiei o driver do msql connector tanto o 5.1.15 quanto o 5.1.17, na pasta lib do tomcat e no projeto tambem coloque esses drivers em tudo web-inf/lib, librares/apache tomcat… e nada

Informações: Server startup in 1036 ms

Set 20, 2011 3:31:28 PM org.apache.catalina.core.StandardWrapperValve invoke

Grave: Servlet.service() for servlet [AdicionaContato] in context with path [/fj21-agenda] threw exception

java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21

at br.com.caelum.agenda.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:17)

at br.com.caelum.agenda.dao.ContatoDAO.(ContatoDAO.java:23)

at br.com.caelum.agenda.servlet.AdicionaContatoServlet.processRequest(AdicionaContatoServlet.java:54)

at br.com.caelum.agenda.servlet.AdicionaContatoServlet.doPost(AdicionaContatoServlet.java:95)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)

at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)

at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)

at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)

at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)

at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)

at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)

at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)

at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)

at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)

at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)

at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)

at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)

at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.lang.Thread.run(Unknown Source)

Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21

at java.sql.DriverManager.getConnection(Unknown Source)

at java.sql.DriverManager.getConnection(Unknown Source)

at br.com.caelum.agenda.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:14)

 21 more
D

Camarada,

java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21

Quando você informa o path para o mysql, precisa colocar a porta…

jdbc:mysql:3306//localhost/fj21

Caso contrário, ele irá apresentar o erro, pois o driver não conhece esse pattern de path

jdbc:mysql://localhost/fj21

Entendeu?

Criado 29 de dezembro de 2010
Ultima resposta 21 de set. de 2011
Respostas 8
Participantes 6