Como corrigir: “Nenhum driver adequado foi encontrado para o jdbc: mysql: // localhost / dbname” erro ao usar pools?

Eu estou tentando criar uma conexão com o meu database, quando eu coloco testar meu código usando o método main, ele funciona perfeitamente. No entanto, ao tentar acessá-lo através do Tomcat 7, ele falha com erro:

No suitable driver found for jdbc:mysql://localhost/dbname. 

Eu estou usando o pool. Eu coloco as bibliotecas do conector mysql (5.1.15), dbcp (1.4) e pool (1.4.5) no WEB-INF / lib e no .classpath também. Eu estou usando o Eclipse IDE. Meu código para o driver de database é:

 import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import org.apache.tomcat.dbcp.dbcp.ConnectionFactory; import org.apache.tomcat.dbcp.dbcp.DriverManagerConnectionFactory; import org.apache.tomcat.dbcp.dbcp.PoolableConnectionFactory; import org.apache.tomcat.dbcp.dbcp.PoolingDriver; import org.apache.tomcat.dbcp.pool.impl.GenericObjectPool; public class DatabaseConnector { public static String DB_URI = "jdbc:mysql://localhost/dbname"; public static String DB_USER = "test"; public static String DB_PASS = "password"; // Singleton instance protected static DatabaseConnector _instance; protected String _uri; protected String _username; protected String _password; /** * Singleton, so no public constructor */ protected DatabaseConnector(String uri, String username, String password) { _uri = uri; _username = username; _password = password; GenericObjectPool connectionPool = new GenericObjectPool(null); ConnectionFactory connectionFactory = new DriverManagerConnectionFactory( _uri, _username, _password); PoolableConnectionFactory poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, connectionPool, null, null, false, true); PoolingDriver driver = new PoolingDriver(); driver.registerPool("test", connectionPool); } /** * Returns the singleton instance */ public static DatabaseConnector getInstance() { if (_instance == null) { _instance = new DatabaseConnector(DB_URI, DB_USER, DB_PASS); } return _instance; } /** * Returns a connection to the database */ public Connection getConnection() { Connection con = null; try { con = DriverManager.getConnection("jdbc:apache:commons:dbcp:test"); } catch (SQLException e) { throw new RuntimeException(e); } return con; } } 

Início do meu rastreamento de pilha:

 Apr 5, 2011 9:49:14 PM org.apache.catalina.core.StandardWrapperValve invoke SEVERE: Servlet.service() for servlet [Login] in context with path [/Project] threw exception java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/dbname 

O que está causando esse erro?

Tente colocar o jar do driver na pasta lib do servidor. ($ CATALINA_HOME / lib)

Acredito que o conjunto de conexões precise ser configurado antes mesmo de o aplicativo ser instanciado. (Pelo menos é assim que funciona no Jboss)

O motivo pelo qual você recebeu este erro:

 java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/dbname 

É porque você esqueceu de registrar seu driver mysql jdbc com o aplicativo java.

Isto é o que você escreveu:

 Connection con = null; try { con = DriverManager.getConnection("jdbc:apache:commons:dbcp:test"); } catch (SQLException e) { throw new RuntimeException(e); } 

Deve ser isso:

 Connection con = null; try { //registering the jdbc driver here, your string to use //here depends on what driver you are using. Class.forName("something.jdbc.driver.YourFubarDriver"); con = DriverManager.getConnection("jdbc:apache:commons:dbcp:test"); } catch (SQLException e) { throw new RuntimeException(e); } 

Você terá que ler o manual em seu driver mysql jdbc específico para encontrar a string exata a ser colocada dentro do parâmetro Class.forName (“…”).

Class.forName não é necessário com o JDBC v.4

A partir do Java 6, o Class.forName("something.jdbc.driver.YourFubarDriver") não será mais necessário se você usar um driver recente (JDBC v.4). Para mais detalhes, leia isto: http://onjava.com/pub/a/onjava/2006/08/02/jjdbc-4-enhancements-in-java-se-6.html

Eu tive o mesmo problema usando o Tomcat7 com o mysql-connector-java-5.1.26 que eu coloquei no meu $ CATALINA_HOME / lib e WEB-INF / lib, apenas no caso. Mas não iria encontrá-lo até que eu usei uma dessas duas declarações antes de obter a conexão:

DriverManager.registerDriver(new com.mysql.jdbc.Driver ());

OU

Class.forName("com.mysql.jdbc.Driver");

Eu então segui com a remoção do mysql-connector-java-5.1.26 de $ CATALINA_HOME / lib e a conexão ainda funciona.

Ao executar o tomcat fora do eclipse, ele não selecionará o conjunto de CATALINA_HOME/lib em CATALINA_HOME/lib . Há duas maneiras de solucioná-lo. Clique duas vezes no servidor Tomcat na visualização de servidores eclipse, ele abrirá a configuração do plug-in do tomcat e:

  1. Clique em “Open Launch Config”> guia Classpath para definir o local do conector / j jar do mysql. ou
  2. Local do servidor> selecione a opção que diz “Usar a instalação do Tomcat (assuma o controle da instalação do Tomcat)”

Eu tinha a biblioteca mysql jdbc em ambos os $ CATALINA_HOME / lib e WEB-INF / lib, ainda recebi este erro. Eu precisava Class.forName (“com.mysql.jdbc.Driver”); para fazer funcionar.

Eu tive o mesmo problema, tudo que você precisa fazer é definir a variável de ambiente classpath para o tomcat, você pode fazê-lo adicionando um arquivo, no meu caso C:\apache-tomcat-7.0.30\bin\setenv.bat , contendo:

 set "CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\lib\mysql-connector-java-5.1.14-bin.jar" 

então codifique, no meu caso:

 Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database_name", "root", ""); 

funciona bem.

Estou executando o Tomcat 7 no Eclipse com o Java 7 e usando o driver jdbc para MSSQL sqljdbc4.jar.

Ao executar o código fora do tomcat, a partir de um aplicativo java independente, isso funcionou muito bem:

  connection = DriverManager.getConnection(conString, user, pw); 

No entanto, quando eu tentei executar o mesmo código dentro do Tomcat 7, descobri que só poderia fazê-lo funcionar registrando primeiro o driver, alterando o acima para isso:

  DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver()); connection = DriverManager.getConnection(conString, user, pw); 

Usar:

 try { Class.forName("com.mysql.jdbc.Driver").newInstance(); System.out.println("Registro exitoso"); } catch (Exception e) { System.out.println(e.toString()); } DriverManager.getConnection(.. 

Bro, você também pode escrever código como abaixo:

 import java.sql.*; import java.io.*; public class InsertDatabase { public static void main(String[] args) { // TODO Auto-generated method stub try { Class.forName("com.mysql.jdbc.Driver"); Connection con=DriverManager.getConnection( "jdbc:mysql://localhost:3306/Maulik","root","root"); Statement stmt=con.createStatement(); ResultSet rs=stmt.executeQuery("select * from Employee"); while(rs.next()) System.out.println(rs.getInt(1)+" "+rs.getString(2)+" "+rs.getString(3)); con.close(); } catch(Exception e) { System.out.println(e); } } } 

Se você está usando o netbeans você deve adicionar o driver Mysql JDBC na lista de bibliotecas do projeto, nas propriedades do seu projeto.

Eu também tive o mesmo problema algum tempo antes, mas resolvi esse problema.

Pode haver motivos diferentes para essa exceção. E um deles pode ser que o jar que você está adicionando à sua pasta lib pode ser antigo.

Tente descobrir a versão mais recente do mysql-connector-jar e adicione-a ao seu classpath. Isso pode resolver seu problema. O meu foi resolvido assim.

A maior parte do tempo acontece porque dois arquivos mysql-connector-java-3.0.14-production-bin.jar. Um na pasta lib do tomcat e outro no classpath do projeto.

Apenas tente remover o mysql-connector-java-3.0.14-production-bin.jar da pasta lib.

Desta forma, está trabalhando para mim.

Pelo que observei, pode haver duas razões para esta Exceção ocorrer: (1) Seu nome de Driver não está escrito corretamente. (2) O driver não foi associado adequadamente ao projeto Java Passos a seguir no Eclipse: (1) Crie um novo projeto Java. (2) copie o arquivo Jar do conector (3) Clique com o botão direito do mouse no projeto Java e cole-o lá. (4) Clique com o botão direito do mouse no projeto Java -> Properties -> Java Build Path -> libraries-> Add Jar -> escolha ur project (selecione o arquivo jar no menu suspenso) e clique em ok.

adicione o artefato do maven.

   mysql mysql-connector-java 5.1.6  

A solução é direta.

Certifique-se de que o conector do database pode ser alcançado pelo seu classpath ao executar (não compilar) o programa, por exemplo:

 java -classpath .;c:\path\to\mysql-connector-java-5.1.39.jar YourMainClass 

Além disso, se você estiver usando uma versão antiga do Java (pré JDBC 4.0), antes de fazer o DriverManager.getConnection essa linha será necessária:

 Class.forName("your.jdbc.driver.TheDriver"); // this line is not needed for modern Java 

Ao desenvolver usando o Ubuntu (Xubuntu 12.04.1) eu ‘tinha’ que fazer o seguinte:

Usando

Eclipse Juno (baixado, não instalado através do centro de software), Tomcat 7 (baixado em um diretório de usuário personalizado) também adicionado como um Servidor no Eclipse, Projeto Web Dinâmico com um Servlet 3.0, Servidor MySQL em localhost configurado e testado com usuário e senha (certifique-se de testar) o driver do conector MySQL 5.1.24 jar,

Eu ‘HAD’, e repito ‘HAD’, para nós a instrução Class.Load (“com.mysql.jdbc.Driver”) junto com a adição do conector driver.jar para estar na pasta lib do projeto da web para que funcione nesta situação.

IMPORTANTE !!: depois de copiar o driver.jar para o lib, certifique-se de atualizar seu projeto no Eclipse antes de executar o servlet via Tomcat.

Eu tentei adicionar o arquivo jar do driver de conector através do caminho de compilation com e sem o ClassLoad, mas ele não funcionou!

Espero que isso ajude qualquer um que esteja iniciando o desenvolvimento com esta situação específica: a comunidade Java fornece uma ‘LOTE’ de documentação, mas há tantas variables ​​que é difícil cobrir todas elas e isso torna as coisas muito difíceis para o novo cara.

Eu acho que se alguém pudesse explicar porque o Class.Load é necessário aqui (nessa situação) seria benéfico.

Apreciar

Como ninguém deu essa resposta, eu também gostaria de acrescentar que, você pode simplesmente adicionar o arquivo do driver jdbc ( mysql-connector-java-5.1.27-bin.jar no meu caso) à pasta lib do seu servidor (Tomcat No meu caso). Reinicie o servidor e isso deve funcionar.

  1. Coloque o mysql-connector-java-5.0.8-bin.jar em $ CATALINA_HOME / lib

  2. Verifique se há erro de digitação no URL de conexão, por exemplo
    “jdbc: mysql: // localhost: 3306 / report” (‘report’ aqui é o nome do db)

  3. Certifique-se de usar o nome da máquina (exemplo: localhost em vez de endereço IP (127.0.0.1))

Adicione a class do driver ao bootstrapclasspath. O problema está no java.sql.DriverManager que não vê os drivers carregados por ClassLoaders que não sejam o Bootstrap ClassLoader.

De outro thread de stackoverflow:

“Segundo. Certifique-se de ter o MySQL JDBC Driver conhecido como Connector / J no classpath do JMeter. Se você não fizer isso – faça o download, descompacte e solte o mysql-connector-java-x.xx.xx-bin.jar no JMeter’s / lib A reboot do JMeter será necessária para escolher a biblioteca ”

Por favor, certifique-se de que o arquivo .jar é adicionado diretamente à pasta lib.

Você pode colocar o jar no caminho do tempo de execução do jboss assim:

C: \ Usuário \ usuário \ workspace \ jboss-as-web-7.0.0.Final \ standalone \ deployments \ MYapplicationEAR.ear \ test.war \ WEB-INF \ lib ca marche 100%

    Intereting Posts