如何解决:使用池时,“没有找到合适的驱动程序jdbc:mysql:// localhost / dbname”错误?

我试图创建一个连接到我的数据库,当我把测试我的代码使用主要的方法,它可以无缝工作。 但是,尝试通过Tomcat 7访问它时,会失败,并显示错误:

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

我正在使用池。 我把mysql连接器(5.1.15),dbcp(1.4)和pool(1.4.5)库放在WEB-INF / lib和.classpath中。 我正在使用Eclipse IDE。 我的数据库驱动程序的代码是:

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

开始我的堆栈跟踪:

 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 

什么是造成这个错误?

尝试将驱动程序jar放在服务器lib文件夹中。 ($ CATALINA_HOME / lib中)

我相信甚至在应用程序实例化之前,连接池也需要设置。 (至少这是如何在Jboss中工作的)

你得到这个错误的原因是:

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

是因为你忘记了注册你的mysql jdbc驱动程序与Java应用程序。

这是你写的:

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

应该是这样的:

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

你必须阅读你的特定的mysql jdbc驱动程序手册来找到确切的字符串放在Class.forName(“…”)参数中。

JDBC v.4不需要Class.forName

从Java 6开始,如果使用最新(JDBC v.4)驱动程序,则不再需要Class.forName("something.jdbc.driver.YourFubarDriver") 。 详情请阅读: http : //onjava.com/pub/a/onjava/2006/08/02/jjdbc-4-enhancements-in-java-se-6.html

为了防万一,我在Tomcat7中使用了mysql-connector-java-5.1.26,这个问题同样出现在$ CATALINA_HOME / lib和WEB-INF / lib中。 但是直到我在获取连接之前使用这两个语句中的任何一个,才会发现它:

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

要么

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

然后,我从$ CATALINA_HOME / lib中删除mysql-connector-java-5.1.26,连接仍然有效。

在eclipse中运行tomcat时,不会选择在CATALINA_HOME/lib设置的CATALINA_HOME/lib ,有两种方法可以解决这个问题。 双击eclipse服务器视图中的Tomcat服务器,它将打开tomcat插件配置,然后:

  1. 点击“Open Launch Config”> Classpath选项卡,设置mysql连接器/ j jar的位置。 要么
  2. 服务器位置>选择选项“使用Tomcat安装(控制Tomcat安装)”

我在$ CATALINA_HOME / lib和WEB-INF / lib中都有了mysql jdbc库,但是仍然有这个错误。 我需要Class.forName(“com.mysql.jdbc.Driver”); 使其工作。

我有同样的问题,所有你需要做的是为tomcat定义classpath环境变量,你可以通过添加一个文件,在我的情况下C:\apache-tomcat-7.0.30\bin\setenv.bat ,包含:

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

然后代码,在我的情况下:

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

工作正常。

我使用Java 7在Eclipse中运行Tomcat 7,并使用MSSQL sqljdbc4.jar的jdbc驱动程序。

当从独立的Java应用程序运行tomcat之外的代码,这工作得很好:

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

但是,当我尝试在Tomcat 7中运行相同的代码时,我发现我只能通过首先注册驱动程序来实现它,将上面的代码更改为:

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

使用:

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

兄弟,你也可以编写代码如下:

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

如果您使用netbeans,则必须在项目的属性中添加Mysql JDBC驱动程序到项目的库列表中

我以前也有同样的问题,但我解决了这个问题。

这个例外可能有不同的原因。 其中之一可能是你添加到lib文件夹的jar可能是旧的。

试着找出最新的mysql-connector-jar版本并将其添加到你的类路径中。 它可以解决你的问题。 我的解决就是这样。

大部分时间是因为两个mysql-connector-java-3.0.14-production-bin.jar文件而发生的。 一个在tomcat的lib文件夹中,另一个在项目的classpath中。

试着从lib文件夹中删除mysql-connector-java-3.0.14-production-bin.jar。

这样它为我工作。

从我观察到的情况来看,可能有两个原因会导致这个例外:(1)您的驱动程序名称拼写不正确。 (2)驱动程序没有与Java项目正确关联在Eclipse中遵循的步骤:(1)创建一个新的Java项目。 (2)复制连接器Jar文件(3)右键单击Java项目并粘贴到那里。 (4)右键点击Java项目 – >属性 – > Java构建路径 – >库 – >添加jar – >选择你的项目(从下拉列表中选择jar文件),然后单击确定。

解决方案很简单。

确保运行 (不编译)程序时可以通过类路径访问数据库连接器,例如:

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

另外,如果您使用旧版本的Java(pre JDBC 4.0),则在执行DriverManager.getConnection之前,此行是必需的:

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

在使用Ubuntu(Xubuntu 12.04.1)进行开发时,我需要做以下工作:

运用

Eclipse Juno(下载,未通过软件中心安装),Tomcat 7(在自定义用户目录中下载)也添加为Eclipse中的服务器,Dynamic Web Project使用3.0 Servlet,MySQL Server配置并使用用户和密码进行测试(一定要测试)MySQL连接驱动5.1.24 jar,

我'HAD',我重复'HAD',给我们Class.Load(“com.mysql.jdbc.Driver”)语句,并将连接器driver.jar添加到Web项目lib文件夹中以使其工作在这个情况下。

重要!!:在将driver.jar复制到lib之后,确保在通过Tomcat运行servlet之前在Eclipse中刷新项目。

我曾尝试通过构建路径添加连接器驱动程序jar文件与没有ClassLoad,但它没有工作!

希望这可以帮助任何人从这个特定的情况开始开发:Java社区提供了很多文档,但是有太多的变量很难涵盖所有的变量,这使得新的变得非常困难。

我想如果有人能解释为什么Class.Load在这里是必需的(在这种情况下),这将是有益的。

请享用

由于没有人给出这个答案,我还想补充一点,你可以添加jdbc驱动文件(在我的情况下是mysql-connector-java-5.1.27-bin.jar )到你的服务器的lib文件夹(Tomcat在我的情况)。 重新启动服务器,它应该工作。

  1. 把mysql-connector-java-5.0.8-bin.jar放在$ CATALINA_HOME / lib中

  2. 检查连接URL中的输入错误,例如
    “jdbc:mysql:// localhost:3306 / report”(这里的'report'是db的名字)

  3. 确保使用机器名称(例如:localhost而不是ip地址(127.0.0.1))

将驱动程序类添加到引导程序路径。 问题出现在java.sql.DriverManager中,除了bootstrap ClassLoader以外,没有看到由ClassLoaders加载的驱动程序。

从其他的stackoverflow线程:

第二,确保在JMeter的类路径中有MySQL JDBC驱动程序aka Connector / J,如果你没有 – 下载它,解包并将mysql-connector-java-x.xx.xx-bin.jar放到JMeter的/ lib目录下JMeter重新启动将需要选择库“

请确保.jar文件直接添加到lib文件夹。

添加来自maven的神器。

  <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.6</version> </dependency> 

你可以把jar放在jboss的运行时间的路径上,如下所示:

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