【问题标题】:Tomcat error: java.sql.SQLException: No suitable driver found for jdbc:sqlserver://Tomcat 错误:java.sql.SQLException:找不到适合 jdbc:sqlserver:// 的驱动程序
【发布时间】:2012-07-07 18:53:20
【问题描述】:

我在 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…… 问题是我讨厌这样的错误......如果你在三天内不解决它,你会很沮丧,不想回到那个状态,你感觉就像撞墙...... 现在我尝试了很多关于它的谷歌搜索,但它仍然没有太大帮助...... 所以如果有人能帮我解决这个问题,我会非常高兴。谢谢。 :)

【问题讨论】:

  • Tomcat 目录中的数据库驱动程序(例如 sqljdbc4.jar)在哪里?
  • @MartinWilson 它位于 C:\Program Files\Apache Software Foundation\Apache Tomcat 7.0.22\lib
  • @home 如何获得 stracktrace?

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


【解决方案1】:

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

【讨论】:

  • 嗨,我在哪里可以找到 Catalina_home/lib?这也是一个问题,我通过谷歌搜索遇到了这个文件夹,但是我的 Tomcat 似乎没有这个文件夹?我在哪里可以找到它?
  • 现在它位于:C:\Program Files\Apache Software Foundation\Apache Tomcat 7.0.22\lib Apache 正在使用这个 tomcat 文件夹,并且 sqlijdbc4.jar 在那里。
  • 如果将数据库地址替换为:jdbc:microsoft:sqlserver://isd.ktu.lt:1433;DatabaseName=LN2012_bakDB2
  • 嗯,几乎一样:/ - java.sql.SQLException: 找不到适合 jdbc:microsoft:sqlserver://isd.ktu.lt:1433;DatabaseName=LN2012_bakDB2 的驱动程序
  • 你能发布堆栈跟踪吗?您可以在 NetBeans 的控制台、服务器的控制台或服务器的日志文件中找到它。
【解决方案2】:

现在回答这个问题可能为时已晚,但为了帮助解决类似问题,以下是我的解决方法。

快速解决方案:

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启动时,它会创建一组class-loaders,它们被组织成如下父子关系:

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

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

Bootstrap:该类加载器包含 JVM 提供的基本运行时类,以及系统扩展目录 $JAVA_HOME/jre/lib/ext 中存在的 JAR 文件中的任何类。。 p>

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

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

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

  • 总之,购买将ojdbc JAR 文件放入$JAVA_HOME/jre/lib/ext JDBC 驱动程序,将在引导级别可见。

【讨论】:

    【解决方案3】:

    我也遇到了同样的问题。这是因为你的tomcat服务器没有你的JDBCjar文件。我通过将JAR 文件复制到tomcat 服务器中的lib 文件夹来解决了这个问题。

    【讨论】:

      【解决方案4】:

      它帮助我将 mssql-jdbc-9.2.1.jre8.jar 文件复制到 C:\Java\jdk1.8.0_291\jre\lib\ext 文件夹

      【讨论】:

      • 当尝试回答一个老问题(这是 9 岁以上的问题)时,请在发布您自己的答案之前阅读现有答案。您的答案在hereherehere 中被多次提及/包含
      猜你喜欢
      • 1970-01-01
      • 2012-08-28
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      相关资源
      最近更新 更多