我正在尝试创建与数据库的连接,当我使用main方法测试我的代码时,它可以无缝地工作。但是,当尝试通过Tomcat 7访问它时,它会失败并显示错误:
No suitable driver found for jdbc:mysql://localhost/dbname.
我正在使用合并。我在WEB-INF / lib和.classpath中放入了mysql连接器(5.1.15),dbcp(1.4)和pool(1.4.5)库。我正在使用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
导致此错误的原因是什么?
答案 0 :(得分:52)
尝试将驱动程序jar放在服务器lib文件夹中。 ($ CATALINA_HOME / lib)
我认为甚至在实例化应用程序之前就需要设置连接池。 (至少这是它在Jboss中的工作方式)
答案 1 :(得分:42)
您收到此错误的原因:
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/dbname
是因为您忘记使用java应用程序注册mysql jdbc驱动程序。
这就是你写的:
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
答案 2 :(得分:37)
我使用Tomcat7和mysql-connector-java-5.1.26有同样的问题,我把它放在我的$ CATALINA_HOME / lib和WEB-INF / lib中,以防万一。但是在获得连接之前我使用这两个语句中的任何一个都不会找到它:
DriverManager.registerDriver(new com.mysql.jdbc.Driver ());
OR
Class.forName("com.mysql.jdbc.Driver");
然后我从$ CATALINA_HOME / lib中删除mysql-connector-java-5.1.26,连接仍然有效。
答案 3 :(得分:8)
当运行tomcat out of eclipse时它不会选择CATALINA_HOME/lib
中设置的lib,有两种方法可以修复它。在eclipse服务器视图中双击Tomcat服务器,它将打开tomcat插件配置,然后:
答案 4 :(得分:4)
我在$ CATALINA_HOME / lib和WEB-INF / lib中都有mysql jdbc库,但是我还是遇到了这个错误。我需要Class.forName(" com.mysql.jdbc.Driver");使它工作。
答案 5 :(得分:3)
兄弟,您也可以编写如下代码:
.format()
答案 6 :(得分:3)
我遇到了同样的问题,您需要做的就是为tomcat定义类路径环境变量,您可以通过添加一个文件(在我的案例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", "");
工作正常。
答案 7 :(得分:2)
我在Eclipse中使用Java 7运行Tomcat 7,并使用jdbc驱动程序运行MSSQL sqljdbc4.jar。
当在一个独立的Java应用程序中运行tomcat之外的代码时,这很好用:
connection = DriverManager.getConnection(conString, user, pw);
然而,当我尝试在Tomcat 7中运行相同的代码时,我发现我只能通过首先注册驱动程序来实现它,将上面的内容更改为:
DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver());
connection = DriverManager.getConnection(conString, user, pw);
答案 8 :(得分:2)
从maven添加工件。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
答案 9 :(得分:2)
使用:
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("Registro exitoso");
} catch (Exception e) {
System.out.println(e.toString());
}
DriverManager.getConnection(..
答案 10 :(得分:1)
之前我也有同样的问题,但我解决了这个问题。
此异常可能有不同的原因。 其中一个可能是您添加到lib文件夹的jar可能已经过时了。
尝试找出最新的mysql-connector-jar版本并将其添加到类路径中。 它可以解决您的问题。我这样解决了。
答案 11 :(得分:1)
大部分时间都是因为两个mysql-connector-java-3.0.14-production-bin.jar文件而发生的。 一个在tomcat的lib文件夹中,另一个在项目的类路径中。
尝试从lib文件夹中删除mysql-connector-java-3.0.14-production-bin.jar。
这种方式对我有用。
答案 12 :(得分:1)
根据我的观察,可能有两个原因导致此异常发生: (1)您的驱动程序名称拼写不正确。 (2)驱动程序与Java项目没有正确关联 Eclipse中要遵循的步骤: (1)创建一个新的Java项目。 (2)复制连接器Jar文件 (3)右键单击Java项目并将其粘贴到那里。 (4)右键单击Java项目 - &gt;属性 - &gt; Java构建路径 - &gt; libraries-&gt;添加Jar - &gt;选择你的项目(从下拉列表中选择jar文件),然后单击确定。
答案 13 :(得分:1)
解决方案很简单。
确保运行(不编译)程序时类路径可以访问数据库连接器,例如:
java -classpath .;c:\path\to\mysql-connector-java-5.1.39.jar YourMainClass
此外,如果您使用旧版本的Java(JDBC 4.0之前版本),则在执行DriverManager.getConnection
之前需要此行:
Class.forName("your.jdbc.driver.TheDriver"); // this line is not needed for modern Java
答案 14 :(得分:1)
如果您使用的是netbeans,则必须在项目的库列表中,在项目的属性中添加Mysql JDBC驱动程序
答案 15 :(得分:0)
使用Ubuntu(Xubuntu 12.04.1)进行开发时,我'HAD'要执行以下操作:
使用
Eclipse Juno(已下载,未通过软件中心安装), Tomcat 7(在自定义用户目录中下载)也在Eclipse中添加为服务器, 带有3.0 Servlet的动态Web项目, 本地主机上的MySQL服务器使用用户和密码进行配置和测试(确保测试) MySQL连接器驱动程序5.1.24 jar,
我'HAD',我重复'HAD',向我们发送Class.Load(“com.mysql.jdbc.Driver”)语句,同时将连接器driver.jar添加到Web项目lib文件夹中它适用于这种情况。
重要!!:将driver.jar复制到lib之后,请确保在通过Tomcat运行servlet之前在Eclipse中刷新项目。
我尝试使用和不使用ClassLoad通过Build Path添加连接器驱动程序jar文件,但它不起作用!
希望这可以帮助任何人在这种特定情况下开始开发:Java社区提供了很多文档,但是有很多变量很难覆盖所有这些变量,这对新人来说非常困难。
我认为如果有人能解释为什么这里需要Class.Load(在这种情况下),这将是有益的。
享受
答案 16 :(得分:0)
由于没有人给出这个答案,我还想补充一点,您可以将jdbc驱动程序文件(在我的情况下为mysql-connector-java-5.1.27-bin.jar
)添加到服务器的lib文件夹(在我的情况下是Tomcat)。重启服务器,它应该工作。
答案 17 :(得分:0)
将mysql-connector-java-5.0.8-bin.jar放入$ CATALINA_HOME / lib
检查连接网址中的拼写错误,例如
“jdbc:mysql:// localhost:3306 / report”('report'这里是数据库名称)
答案 18 :(得分:0)
将驱动程序类添加到bootstrapclasspath。问题出在java.sql.DriverManager中,除了bootstrap ClassLoader之外,没有看到由ClassLoader加载的驱动程序。
答案 19 :(得分:0)
来自其他stackoverflow线程:
“第二。确保你在JMeter的类路径中有MySQL JDBC驱动程序又名连接器/ J。如果你没有 - 下载它,解包并删除mysql-connector-java-x.xx.xx-bin.jar到JMeter的/ lib文件夹。需要JMeter重启才能选择库“
请确保.jar文件直接添加到lib文件夹。
答案 20 :(得分:-2)
你可以将jar放在jboss的运行时间路径中,如下所示:
C:\用户\用户\工作空间\ jboss-as-web-7.0.0.Final \独立\部署\ MYapplicationEAR.ear \ test.war \ WEB-INF \ lib中 ca marche 100%