如何解决:“找不到适用于jdbc:mysql://localhost/dbname的驱动程序"使用池时出错? [英] How to fix: "No suitable driver found for jdbc:mysql://localhost/dbname" error when using pools?
问题描述
我正在尝试建立与数据库的连接,当我使用main方法对代码进行测试时,它可以无缝运行.但是,当尝试通过Tomcat 7访问它时,它失败并显示错误:
I am trying to create a connection to my database, when I put test my code using the main method, it works seamlessly. However, when trying to access it through Tomcat 7, it fails with error:
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.我的数据库驱动程序代码是:
I am using pooling. I put in mysql connector (5.1.15), dbcp (1.4) , and pool(1.4.5) libraries in WEB-INF/lib and in .classpath as well. I am using Eclipse IDE. My code for the database driver is:
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
是什么原因导致此错误?
What is causing this error?
推荐答案
尝试将驱动程序jar放在服务器lib文件夹中. ($ CATALINA_HOME/lib)
Try putting the driver jar in the server lib folder. ($CATALINA_HOME/lib)
我认为,即使在实例化应用程序之前,也需要建立连接池. (至少这是它在Jboss中的工作方式)
I believe that the connection pool needs to be set up even before the application is instantiated. (At least that's how it works in Jboss)
这篇关于如何解决:“找不到适用于jdbc:mysql://localhost/dbname的驱动程序"使用池时出错?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!