Tomcat错误:java.sql.SQLException:没有为jdbc找到合适的驱动程序:sqlserver://

时间:2012-07-07 17:08:38

标签: java tomcat apache-commons-dbcp jdbc-pool

我在Tomcat遇到了一个可怕的问题,因为这个问题很可怕我已经把这个项目扔了一个多月了......但是我仍然需要解决它并继续这个项目。 ..

所以它给我这个错误:

java.sql.SQLException:找不到合适的jdbc驱动程序:sqlserver://isd.ktu.lt:1433; DatabaseName = LN2012_bakDB2 显示java.lang.NullPointerException

问题是相同的应用程序在桌面版本perfectlz中工作,但是当涉及到应该在服务器上运行的版本(NetBeans 7.1.2中的Tomcat 7.0.22.0)时,它只会抛出错误。它似乎没有加载池驱动程序或我甚至不知道......

这是负责的部分:

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);
    //driver.registerPool("jdbc:apache:commons:dbcp: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);
    }
}

它发生在尝试获取连接的位置,然后它获得空指针异常,因为连接未成功检索。

我对Tomcat并不熟悉,直到这一刻,Netbeans处理好tomcat ...... 事情是我讨厌这样的错误...如果你在三天内没有解决它,你会感到非常沮丧,不想再回到那里,你感觉就像撞墙... 现在我尝试了很多关于它的谷歌搜索,但它仍然没有多大的帮助...... 如果有人可以帮助我,我会很高兴。谢谢。 :)

4 个答案:

答案 0 :(得分:3)

您必须将JDBC驱动程序的jar复制到$ CATALINA_HOME / lib。

答案 1 :(得分:0)

回答这个问题可能为时已晚,但为了解决类似的问题,我就是这样做的。

快速解决方案:

JDBC-driver JAR file我的ojdbc6 )复制到$JAVA_HOME/jre/lib/ext对我来说是C:\Program Files\Java\jdk1.7.0_80\jre\lib\ext

<强>详细信息:

根据Apache Tomcat 7 documentations启动Tomcat时,它会创建一组类加载器,它们被组织成以下父子关系:

     Bootstrap
         |
      System
         |
      Common
      /     \
 Webapp1    Webapp2 ...

每个类加载器特定目录中搜索JAR文件。它们可见的类和资源解释如下:

Bootstrap :此类加载器包含JVM提供的基本运行时类,以及System Extensions目录 $JAVA_HOME/jre/lib/ext 中存在的JAR文件中的任何类。

系统:此类加载器通常是从 CLASSPATH 环境变量的内容初始化的。 Tomcat内部类和Web应用程序都可以看到所有这些类。但是,Tomcat有一些例外。

Common :此类加载器包含对Tomcat内部类和所有Web应用程序都可见的其他类。此类加载器(默认情况下)在jar文件的 $CATALINA_BASE/lib $CATALINA_Home/lib 中查找。

Webapps :为部署在单个Tomcat实例中的每个Web应用程序创建一个类加载器。 Web应用程序的 /WEB-INF/classes 目录中的所有解压缩的类和资源,以及Web上 /WEB-INF/lib 目录下的JAR文件中的类和资源应用程序,对此Web应用程序可见,但不对其他应用程序可见。

  • 总之,将ojdbc JAR文件放在$JAVA_HOME/jre/lib/ext JDBC驱动程序中,将在Bootstrap级别显示。

答案 2 :(得分:0)

我也遇到了同样的问题。这是因为您的tomcat服务器没有jar的{​​{1}}文件。我通过将JDBC文件复制到tomcat服务器中的JAR文件夹中解决了该问题。

答案 3 :(得分:0)

这有助于我将 mssql-jdbc-9.2.1.jre8.jar 文件复制到 C:\Java\jdk1.8.0_291\jre\lib\ext 文件夹中。