如何解决:使用池时,“没有找到合适的驱动程序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插件配置,然后:
- 点击“Open Launch Config”> Classpath选项卡,设置mysql连接器/ j jar的位置。 要么
- 服务器位置>选择选项“使用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在我的情况)。 重新启动服务器,它应该工作。
-
把mysql-connector-java-5.0.8-bin.jar放在$ CATALINA_HOME / lib中
-
检查连接URL中的输入错误,例如
“jdbc:mysql:// localhost:3306 / report”(这里的'report'是db的名字) - 确保使用机器名称(例如: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%