[英]Web application cannot establish connection to database
我的应用程序在 Tomcat 上运行时,在 webapps 文件夹中部署为 a.war 时无法连接到我的数据库,但是当我直接通过 Eclipse 运行它时,它可以连接。 两种情况下的代码完全相同。 此外,webapps 文件夹中的其他应用程序原本可以连接到数据库,现在也无法连接。 jdbc 代码是正确的,因为我已经使用离线应用程序或通过 eclipse 运行它时对其进行了测试,但当我使用 localhost 在 Chrome 上访问它时则不然。 我的 tomcat 服务器发生了什么事?
注意:JDBC 驱动程序是 MS Access 驱动程序之一。
两种情况下的代码完全相同。
不,这不对; 如果它完全相同,您将正确连接。
但是当我直接通过 Eclipse 运行它时它可以连接
这是否意味着您有一个主要方法来驱动正确连接的代码? 您执行此操作的方式通常不同于 web 应用程序 - 您知道,对吧?
如果您可以发布异常或日志消息,那将有很大帮助。
我猜它可能是以下任何一种; 猜测是必要的,因为您没有提供足够的信息来获得可靠的答案:
ClassNotFoundException
。可能是其他可能性。
更新:
由于您使用的是 Access,并且没有提供其他信息,我猜您正在使用相对文件路径来访问 Access .mdb
文件。 您在 Eclipse 中成功运行的命令行应用程序可以正常工作,因为您提供了相对于项目根目录正确的相对文件路径。 当您部署到 Tomcat 时,该相对路径不再正确,因此您的应用程序无法再找到数据库。
听起来您没有打印堆栈跟踪以查找错误,因此您丢失了可能帮助您解决这个问题的信息。
Microsoft Access 不是多用户数据库。 在 Tomcat 上运行的基于 web 的应用程序肯定是多线程的。 您不应将 Access 用于 web 应用程序。 我会考虑切换到另一个数据库。
首先,您需要验证数据库文件的路径。 事实上,我相信它必须是 tomcat 正常工作的绝对路径。 最简单的做法是将数据库文件放在 C:\data 或类似文件中,然后在代码中硬编码路径。 当然,该文件将在您的战争之外,因此不可移植(即,可部署到远程服务器)。
其次,您确实需要确保 JDBC 驱动程序可用。 如果您在代码中使用 Class.forName 来加载驱动程序,您只需确保包含驱动程序的 jar 位于 tomcat 类路径(其中将包括您的 webapp)目录中。 如果您使用 -Djdbc.drivers JVM 标志方法,则需要将其添加到 tomcat 启动脚本中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.