我试图创建到数据库的连接,当我使用main方法测试代码时,它可以无缝工作.然而,当试图通过Tomcat 7访问它时,它失败并出现错误:

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

我正在使用池.我将mysql连接器(5.1.15)、dbcp(1.4)和池(1.4.5)库放在WEB-INF/lib和中.类路径也是如此.我正在使用EclipseIDE.我的数据库驱动程序代码是:

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

是什么导致了这个错误?

推荐答案

try 将驱动程序jar放入服务器库文件夹.($CATALINA_HOME/lib)

我认为,甚至在应用程序实例化之前,就需要设置连接池.(至少在Jboss中是这样的)

Mysql相关问答推荐

可以在MySQL表名中使用表情包吗?

将 GORM 与自定义连接表和外键结合使用

估计对大表进行分区所需的时间

在 MySQL 中跨日期和位置计算和排序实体的共现

基于关系的每个实体有一个真值和多个假值

Mysql,显示谁已经和没有 Select 退出巴士服务

mysql insert into select join - 通过连接表将值从一列复制到另一表

从 mysql RDS 导出数据以导入 questDb

如何创建将行转换为列的 MySQL 查询?

在 SQL 中的 case 语句之后将新列转换为 INT

估计行数 SQL

为什么在有 BEGIN 和 END 时为存储过程指定分隔符?

基于两个单元格值的 SQL 过滤表

如何在 MySQL 上一次删除一系列记录?

用于国际和多语言目的的数据库建模

如何存储重复日期牢记夏令时

问号在 MySQL 中WHERE column = ?的意义是什么?

在 WHERE 子句中使用 mysql concat()?

如何通过一个语句描述数据库中的所有表?

为什么在 MySQL 中使用外键约束?