【问题标题】:Get error java.sql.SQLException: No suitable driver found for jdbc:sqlserver://localhost;databaseName=ABC;integratedSecurity=true on Production获取错误 java.sql.SQLException: No suitable driver found for jdbc:sqlserver://localhost;databaseName=ABC;integratedSecurity=true on Production
【发布时间】:2019-02-26 08:22:35
【问题描述】:

我通过 Eclipse 使用 Java、JSP、Tomcat 创建了一个 Web 应用程序。

  1. 在我的 Windows 开发环境中运行应用程序时,它运行良好。数据库连接很好(通过 Eclipse 在 Lib 中的 sqljdbc42.jar) 测试数据库在我的 Window 开发 PC 上 链接:http://localhost:8080/App/

  2. 为了测试生产环境中的数据库连接是否正常,我有一个 Java 文件(与我的项目无关,但使用相同的数据库驱动程序和 url。它仅用于测试生产环境中的数据库连接),它连接到正确位于生产环境中的数据库。

  3. 但是,当我将我的 war 文件(从本地开发环境)上传到 Tomcat WebApps 文件夹后,标题中出现错误,生产上的数据库未连接成功。

我使用以下驱动程序和 url 进行数据库连接

drivers=com.microsoft.sqlserver.jdbc.SQLServerDriver

url=jdbc:sqlserver://localhost;databaseName=ABC;integratedSecurity=true

在上面的url字符串中,我已经尝试了如上的localhost,也尝试了生产IP地址,服务器名称,localhost:1433localhost\\MSSQLSERVER,都得到相同的错误

我在生产站点的ClassPath 中有以下内容:

C:\sqljdbc42.jar;C:\microsoft-mssqlserver.jar;C:\Program Files\Java\jdk1.8.0_201\bin;C:\Program Files\Java\jre1.8.0_201\bin;.

提前谢谢你。

【问题讨论】:

  • 驱动jar没有包含在你的war文件中
  • 嗨拉佐,感谢您的反馈。我在生产站点的 ClassPath 中设置了 sqljdbc42.jar:C:\sqljdbc42.jar;C:\microsoft-mssqlserver.jar;C:\Program Files\Java\jdk1.8.0_201\bin;C:\Program Files\Java \jre1.8.0_201\bin;。这应该有帮助,对吧?

标签: java sql-server


【解决方案1】:

您应该检查 tomcat 服务器的类加载器路径。关于docs,你的服务器希望在以下位置找到sqlserver驱动jar(sqljdbc42.jar):

  1. JVM 的引导类 ($JAVA_HOME/jre/lib/ext)
  2. /WEB-INF/classes 您的网络应用程序
  3. /WEB-INF/lib/*.jar 您的网络应用程序
  4. 系统类加载器类(通过CLASSPATH环境变量描述)
  5. 通用类加载器类($CATALINA_BASE/lib$CATALINA_HOME/lib

因此,您可以尝试的最佳选择是:

  • 将 jar 复制到 $JAVA_HOME/jre/lib/ext (#1)
  • 或配置您的构建,以便将 jar 复制到 /WEB-INF/lib/ (#3)

Number#2 适用于 java 类;不适合你的情况。

#4 和#5 更有可能使用 tomcat 自己的结构,但是如果你想把 jar 放进去,它仍然是完全合法的

进一步编辑: 出于某种原因,有cases Tomcat 可能会为了防止内存泄漏而阻止 sqlserver 驱动程序。因此,如果您通过应用本文前面提到的解决方案确定 jar 位于类路径中;您也可以尝试通过将以下内容添加到 server/.xml 来禁用泄漏检查:

<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" driverManagerProtection="false" />

【讨论】:

  • 编辑了答案,因为您的JAVA_HOME 看起来更像JRE_HOME,您可以尝试CATALINA_HOME/lib 来放置罐子(即使它对我来说不是最漂亮和可分发的方式)。如果仍然没有解决方案,请检查添加的进一步编辑部分。
猜你喜欢
  • 2013-10-29
  • 1970-01-01
  • 2022-12-19
  • 1970-01-01
  • 2015-01-29
  • 2015-10-10
  • 2016-05-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多