Conexão de JDBC no servlet

7 respostas
N

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
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();
	}
	}
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:
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)
	 */
	
	}
}

Porfavor, me ajudem! Obrigada

7 Respostas

Z

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?

L

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.

N

Olá, obrigada por estarem me ajudando. :)

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
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);   
	   } 
	
}

Obrigada pela ajuda :)

L

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
        }    
     
    }  
 }
G

Olá!

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

Abs.

Z

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.

N

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.

Criado 16 de agosto de 2010
Ultima resposta 23 de ago. de 2010
Respostas 7
Participantes 4