java - 在 servlet 中使用池从池获取与数据库的连接时出错

标签 java servlets database-connection connection-pooling

嗯,我的处境相当尴尬。我有一个工作数据库管理器类,当我在桌面版本(Swing GUI)上运行它时它可以工作,但是,当我在 servlet 上运行相同的类时,我收到一个奇怪的错误,它无法获取联系。我正在使用数据库池进行优化。

因此错误如下所示:

Error in Database Connection: Error getting connection to database - java.sql.SQLException: No suitable driver found for jdbc:sqlserver://isd.ktu.lt:1433;DatabaseName=LN2012_bakDB2

包含相关方法的类如下所示:

    package Core;

import DataTypes.Parameters;
import Interfaces.OutputInterface;
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.dbcp.ConnectionFactory;
import org.apache.commons.dbcp.DriverManagerConnectionFactory;
import org.apache.commons.dbcp.PoolableConnectionFactory;
import org.apache.commons.dbcp.PoolingDriver;
import org.apache.commons.pool.impl.GenericObjectPool;

/**
 *
 * @author arturas
 */
public class DatabaseConnection {

    String specificError = "Error in Database Connection: ";
    OutputInterface gui = null;
    boolean allowOutput = true;
    GenericObjectPool connectionPool;
    ConnectionFactory connectionFactory;
    PoolableConnectionFactory poolableConnectionFactory;
    PoolingDriver driver;
    Connection con = null;

    public DatabaseConnection(Parameters params) {                

        // parameters and the output                
        this.gui = params.getGui();

        // activate database pool
        connectionPool = new GenericObjectPool(null);
        connectionFactory = new DriverManagerConnectionFactory(params.getDbAdr(), params.getDbUser(), params.getDbPass());
        poolableConnectionFactory = new PoolableConnectionFactory(connectionFactory, connectionPool, null, null, false, true);
        driver = new PoolingDriver();
        driver.registerPool("GenTreeDatabase", connectionPool);        
    }

    public void openConn() {
        if (allowOutput) gui.print("Getting connection to database");
        try {
            con = DriverManager.getConnection("jdbc:apache:commons:dbcp:GenTreeDatabase");
            if (con != null) {
                if (allowOutput) gui.print("Connection to database was successful");
            }
        } catch (SQLException ex) {
            gui.err(specificError + "Error getting connection to database - " + ex);
        }
    }

    public void closeConn() {
        try {
            con.close();
            if (allowOutput) {
                gui.print("Connection to database closed successfully");
            }
        } catch (SQLException ex) {
            gui.err(specificError + ex);
        }
    }

调用try in方法openConn时出现该错误。 有人可以帮我解决这个问题吗?

最佳答案

您收到此错误是因为您的类路径中没有驱动程序。可能在您的桌面应用程序中有。您需要将驱动程序的 .jar 文件放入 servlet 容器的全局类路径或应用程序类路径中,它应该可以工作。

我更喜欢将驱动程序的 jar 添加到服务器全局类路径中,因为可能有多个应用程序将使用相同的 .jar 文件来加载驱动程序。

关于java - 在 servlet 中使用池从池获取与数据库的连接时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10968470/

相关文章:

使用jdbc连接mysql报错

php - SQLSTATE[HY000] [2002] 无法通过套接字 '/var/run/mysqld/mysqld.sock' 连接到本地 MySQL 服务器 (2)

java - Kafka 8.2.2 动态主题删除第一个事件

java - 使用JSP代码动态更改DIV标签内容

java - 从 servlet 内获取 Web 应用程序类路径

servlets - 自定义错误页面在 Jetty 中不起作用

mysql - Tomcat 服务器与 Mysql 5.5 连接

java - 创建弹出窗口(不是表单)以在 ADF 中上传文件

java - 如何在 Eclipse 中将源文件夹更改为测试源文件夹

java - 使用共享数据库和模型更新在 Heroku 上运行应用程序