Conexão de JDBC no servlet

Olá a todos, sempre programei em ambinete desktop em outras linguagens, mas agora tenho que trabalhar com JAVA via web. Inicialmente aprendi o java DESKTOP mas agora estou partindo para o web e estou tendo algumas dificuldades, uma delas é fazer o meu projeto web encontrar o diver JDBC, não sei o que esta acontecendo, configurei da mesma forma que o java desktop q estava funcionando mas não com servlet. Eu já coloquei o Driver do meu projeto, se eu visualiso em uma classe sem ser servlet ele funciona mas quando eu tento em um servlet, ele dá erro e informa que não pode carregar o driver.

Esse funciona

[code]
public class JDBCServlet {
public static void main(String[] args) throws SQLException {
Connection conexao = DriverManager.getConnection(“jdbc:mysql://localhost:3306”,“root”,“natasha”);

System.out.println("Conectado!");
conexao.close();
}
}[/code]

Esse da erro informando que não pode carregar o driver:

private final String URL = "jdbc:mysql://localhost:3306/sorteio",   
	         NOME = "root", SENHA = "natasha";   
	  
	   private Connection con;   
	   private Statement comando;   

private void conectar() { try { con = Conexao.conexao(URL, NOME, SENHA, Conexao.MYSQL); comando = con.createStatement(); System.out.println("Conectado!"); } catch (ClassNotFoundException e) { imprimeErro("Erro ao carregar o driver", e.getMessage()); } catch (SQLException e) { imprimeErro("Erro ao conectar", e.getMessage()); } }

Esse é o servlet:

[code]
public class Sorteio extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void service(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
PrintWriter out = response.getWriter();
/**
* @see HttpServlet#HttpServlet()
*/

    // TODO Auto-generated constructor stub
    DaoResultado daoResultado = new DaoResultado();
    
    //daoResultado.buscarTodos();
    daoResultado.buscar("1");
    out.println("Erro do numero");



/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */

}

}[/code]

Porfavor, me ajudem! Obrigada

Você usou o DriverManager.registerDriver ou Class.forName na classe do driver antes de tentar conectar?

Qual é o erro?

Quando vc disse que colocou o driver no seu projeto, vc quis dizer no classpath?

Só uma coisa, qual container Web ou servidor de aplicação você usa? (Ex.: Tomcat, Glassfish, JBoss…)

Falo isso porque o processo de registro de conexão ao banco num ambiente web é bastante diferente. Você, por exemplo, registra os dados da conexão no seu servidor, e não na sua aplicação. Depois você obtém um DataSource deste servidor.

Se você disser qual versão do seu servidor, eu posso te ajudar.

Olá, obrigada por estarem me ajudando. :slight_smile:

estou usando o Class.forName - Tomcat7 e o Eclipse

Coloquei no meu classpath o driver do MYSQL que é o mysql-connector-java-5.1.12-bin
eu primeiro coloquei esse jar dentro da raiz do meu projeto depois dentro do eclipse cliquei com o botão direito em cima dele e cliquei em build Path e add build Path

Essa é a minha classe de conexão

[code]
public class Conexao{
public static final int MYSQL = 0;
private static final String MySQLDriver = “com.mysql.jdbc.Driver”;

   public static Connection conexao(String url, String nome, String senha,   
         int banco) throws ClassNotFoundException, SQLException {   
      switch (banco) {         
      case MYSQL:            
         Class.forName(MySQLDriver);   
         break;   
      }   
      return DriverManager.getConnection(url, nome, senha);   
   } 

} [/code]

Obrigada pela ajuda :slight_smile:

Se é o Tomcat 7, vamos lá:

:arrow: Coloque o driver do MySQL dentro da pasta lib do Tomcat. Setar o classpath pode não ser uma boa opção

:arrow: No arquivo context.xml, dentro da pasta conf, adicione um trecho xml para configuração da sua conexão (dentro das tags )

<Resource name="jdbc/Sorteio"
          auth="Container"
          type="javax.sql.DataSource"
          username="root"
          password="natasha" 
          driverClassName="com.mysql.jdbc.Driver"
          url="jdbc:mysql://localhost:3306/sorteio"
          maxActive="100"
          maxIdle="30"
          validationQuery="Select 1"
/>

Eu usei o máximo possível das suas configurações, chamei o pool de conexão de “jdbc/Sorteio”, mas você poderia dar outro nome à sua escolha.

:arrow: Registre seu pool de conexão no web.xml:

<resource-ref>
      <res-ref-name>jdbc/Sorteio</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
  </resource-ref>

:arrow: E obtenha sua conexão via lookup:

public class Sorteio extends HttpServlet {  
    private static final long serialVersionUID = 1L;  

    protected void service(HttpServletRequest request, HttpServletResponse response)  
    throws IOException, ServletException {  
        PrintWriter out = response.getWriter();   
    
        try {
            InitialContext initCtx = new InitialContext();
            DataSource dataSource = (DataSource) initCtx.lookup("java:comp/env/jdbc/Sorteio"); 
            Connection conn = dataSource.getConnection();

            // usa a conexão

            conn.close(); // não se esqueça de fechá-lo
            
        } catch (NamingException ex) {
            // TODO
        }    
     
    }  
 }  

Olá!

Qual o tipo de erro que você recebe no console?
Você já iniciou o serviço do Mysql?

Abs.

Você não precisa de um pool de conexões para usar num projeto web, fazer igual vc faz num projeto para desktop deveria funcionar.

Coloca o erro o tomcat dá quando você tenta conectar.

Obrigada a todos, acabei conseguindo fazer a conexão com o banco sem precisar usar um pool de conexões, mas acredito que foram as configurações que me foi dito acabaram resolvendo meu problema!!
Obrigada a todos mais uma vez.