臭名昭著的 java.sql.SQLException: 找不到合适的驱动程序

2024-03-27

我正在尝试将支持数据库的 JSP 添加到现有的 Tomcat 5.5 应用程序(GeoServer 2.0.0,如果有帮助的话)。

应用程序本身与 Postgres 通信得很好,所以我知道数据库已启动,用户可以访问它,所有这些都是好东西。我想要做的是在我添加的 JSP 中进行数据库查询。我已经使用了配置示例Tomcat 数据源示例 http://tomcat.apache.org/tomcat-5.5-doc/jndi-datasource-examples-howto.html几乎开箱即用。必需的标记库位于正确的位置——如果我只有标记库引用,则不会发生错误,因此它会找到这些 JAR。 postgres jdbc 驱动程序 postgresql-8.4.701.jdbc3.jar 位于 $CATALINA_HOME/common/lib 中。

这是 JSP 的顶部:

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<sql:query var="rs" dataSource="jdbc/mmas">
  select current_validstart as ValidTime from runoff_forecast_valid_time
</sql:query>

$CATALINA_HOME/conf/server.xml 中的相关部分,位于<Host>这又是在<Engine>:

<Context path="/gs2" allowLinking="true">
  <Resource name="jdbc/mmas" type="javax.sql.Datasource"
      auth="Container" driverClassName="org.postgresql.Driver"
      maxActive="100" maxIdle="30" maxWait="10000"
      username="mmas" password="very_secure_yess_precious!"
      url="jdbc:postgresql//localhost:5432/mmas" />
</Context>

这些行是 webapps/gs2/WEB-INF/web.xml 中标记的最后一行:

<resource-ref>
  <description>
     The database resource for the MMAS PostGIS database
  </description>
  <res-ref-name>
     jdbc/mmas
  </res-ref-name>
  <res-type>
     javax.sql.DataSource
  </res-type>
  <res-auth>
     Container
  </res-auth>
</resource-ref>

最后,例外:

   exception
    org.apache.jasper.JasperException: Unable to get connection, DataSource invalid: "java.sql.SQLException: No suitable driver"
    [...wads of ensuing goo elided]

臭名昭著的 java.sql.SQLException: 找不到合适的驱动程序

这个异常基本上可以有two causes:

1. JDBC驱动未加载

的情况下Tomcat,需要保证JDBC驱动放在服务器自己的/lib folder.

其他服务器也有类似的放置 JAR 文件的方式:

  • 玻璃鱼: 将JAR文件放入/glassfish/lib
  • WildFly: 将JAR文件放入/standalone/deployments

或者,当你actually不使用服务器管理的连接池数据源,例如您通过JNDI获取@Resource或者在JPA中配置persistence.xml,但是当你手动摆弄时DriverManager#getConnection() https://docs.oracle.com/en/java/javase/20/docs/api/java.sql/java/sql/DriverManager.html#getConnection(java.lang.String)WAR 中自定义类中的低级方式,那么您需要将 JDBC 驱动程序放在 WAR 中/WEB-INF/lib并执行..

Class.forName("com.example.jdbc.Driver");

..在您的自定义代码中before首先DriverManager#getConnection()致电,确保您这样做not吞下/忽略任何ClassNotFoundException它可以抛出它并继续代码流,就好像没有发生任何异常一样。也可以看看我必须将 Tomcat 连接池的 JDBC 驱动程序放置在哪里? https://stackoverflow.com/questions/13161747/where-do-i-have-to-place-the-jdbc-driver-for-tomcats-connection-pool and 向与数据库交互的 Servlet 提交表单会导致空白页面 https://stackoverflow.com/questions/6044204/submitting-form-to-servlet-which-interacts-with-database-results-in-blank-page/6044337#6044337.

2. 或者,JDBC URL 语法错误

您需要确保指定的 JDBC URL 符合 JDBC 驱动程序文档,并记住它通常区分大小写。当 JDBC URL 未返回时true for Driver#acceptsURL() https://docs.oracle.com/en/java/javase/20/docs/api/java.sql/java/sql/Driver.html#acceptsURL(java.lang.String)对于任何加载的驱动程序,那么您也将得到这个异常。

的情况下PostgreSQL它被记录在案here https://jdbc.postgresql.org/documentation/use/#connecting-to-the-database.

使用 JDBC,数据库由 URL(统一资源定位器)表示。对于 PostgreSQL®,这采用以下形式之一:

  • jdbc:postgresql:database
  • jdbc:postgresql:/
  • jdbc:postgresql://host/database
  • jdbc:postgresql://host/
  • jdbc:postgresql://host:port/database
  • jdbc:postgresql://host:port/

的情况下MySQL它被记录在案here https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-reference-jdbc-url-format.html.

这是连接 URL 的通用格式:

protocol//[hosts][/database][?properties]

这是一个简单的单主机连接 URL 的示例:

jdbc:mysql://host1:33060/sakila

的情况下Oracle它被记录在案here https://www.orafaq.com/wiki/JDBC.

Thin 驱动程序为所有这些驱动程序提供了以下类型的 URL 格式:

SID(Oracle不再推荐使用):

jdbc:oracle:thin:[<user>/<password>]@<host>[:<port>]:<SID>

服务:

jdbc:oracle:thin:[<user>/<password>]@//<host>[:<port>]/<service>

TNS 名称:

jdbc:oracle:thin:[<user>/<password>]@<TNSName>


也可以看看:

  • 我必须将 Tomcat 连接池的 JDBC 驱动程序放置在哪里? https://stackoverflow.com/questions/13161747/where-do-i-have-to-place-the-jdbc-driver-for-tomcats-connection-pool
  • 如何在Eclipse Web项目中安装JDBC驱动程序而不面临java.lang.ClassNotFoundException https://stackoverflow.com/questions/2353141/how-to-install-mysql-jdbc-driver-in-eclipse-web-project-without-java-lang-classn
  • 我应该如何在基于 servlet 的应用程序中连接到 JDBC 数据库/数据源? https://stackoverflow.com/questions/2299469/how-should-i-connect-to-a-mysql-data-source-in-a-servlet-based-application
  • “Class.forName()”和“Class.forName().newInstance()”有什么区别? https://stackoverflow.com/questions/2092659/what-is-the-difference-between-class-forname-and-class-forname-newinstanc/2093236#2093236
  • 将 Java 连接到 MySQL 数据库 https://stackoverflow.com/questions/2839321/connect-java-to-a-mysql-database/2840358#2840358
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

臭名昭著的 java.sql.SQLException: 找不到合适的驱动程序 的相关文章

随机推荐

  • Android appWidget 多个实例

    这个问题几乎是重复的Android 多个appWidgets播放不同的声音 https stackoverflow com questions 4225197 android multiple appwidgets playing dife
  • cvc-elt.1:找不到元素“MyElement”的声明

    我正在尝试使用 xsd 验证一个非常简单的 xml 但由于某种原因我收到此错误 如果有人能向我解释原因 我将非常感激 XML File
  • ngx/translate - 仅翻译字符串的一部分

    我需要使用翻译来自服务器的字符串ngx 翻译 https github com ngx translate core 当我需要翻译字符串时它工作得很好 但在某些情况下我只需要翻译字符串的一部分 例如 你好谢伊 或 你好约翰 我只需要翻译 你
  • 将数据透视缓存从一个文件上的数据透视传输到另一个文件上的数据透视?

    我需要将 Excel 文件上的数据透视表的缓存安全地传输到另一个文件上的数据透视表中 我怎样才能做到这一点 这是我现在使用的代码 请注意 即使源数据透视数据源已被消除 此方法仍然有效 Public Sub TransferPivotCach
  • Rails 重命名协会

    我有两个模型 TreeNode 和 User 每个用户has oneTreeNode 即树的根 class TreeNode acts as tree belongs to user end class User has one tree
  • Django manage.pysyncdb 抛出 No module named MySQLdb

    我是一个学习Python Django的新手 我正在使用以下教程here http docs djangoproject com en dev intro tutorial01 intro tutorial01 在 Snow Leopard
  • TerminateProcess 不适用于经过验证的进程 ID

    我正在开发应该杀死具有给定名称的进程的应用程序 我使用的操作系统是 Windows 7 问题是 对于任务管理器中列出的具有非空白用户名字段的所有进程 它都可以正常工作 但是 当进程的用户名为空时 即使任务管理器也无法杀死该进程 谁能告诉我为
  • 用法:java cucumber.api.cli.Main [选项] [ [FILE|DIR][:LINE[:LINE]*] ]+

    我在运行功能文件时收到此错误 Usage java cucumber options FILE DIR LINE LINE Options g glue PATH Where glue code step definitions and h
  • PHP MongoDB 使用 $in/$or 更新多个文档

    我无法弄清楚如何在 PHP 中构建更新查询来更新文档 ID X Y 和 Z 有人有这方面的经验吗 ids array new MongoId 4eaaf929498fe2c80300000c new MongoId 4eaaff24498f
  • 为什么这段Java代码可以编译?

    在方法或类范围内 下面的行将进行编译 带有警告 int x x 1 在班级范围内 变量获取默认值的地方 以下给出 未定义的引用 错误 int x x 1 这不是第一个吗x x 1应该最终出现相同的 未定义引用 错误吗 或者也许是第二行int
  • 如何使用javascript通过网络摄像头录制视频

    我想通过网络摄像头录制视频并将其上传到服务器 我不想使用任何插件 我怎样才能至少录制视频 GitHub上有一个项目叫记录RTC https github com muaz khan WebRTC Experiment tree master
  • 视图被关闭时发生自动布局内部错误

    当我驳回一些我有一些限制的观点时 我遇到了一个有趣的错误 自动布局内部错误 找不到传出行头 期间传入head AppName ViewName 0x7fc072ed8ef0 Width id 6805 系数接近零的变量的优化 应该 永远不会
  • JSON 名称-值对可以有空名称吗?

    我正在使用测试套件中的 example json 测试我的 JSON 代码here https code google com p json test suite 它包含很多名称 值对 其中名称只是一个空字符串 即 它是否正确 RFC462
  • 雅虎财经 API - GET 报价返回“无效 Cookie”

    在过去的几年中 我一直使用以下链接来获取查询中符号的完整当前报价 https query1 finance yahoo com v7 finance quote symbols AAPL https query1 finance yahoo
  • 如何将自定义表情符号上传到我的 Discord 机器人

    我已经制作了一个不和谐的机器人 现在我想开始添加自定义表情符号 我看过很多关于如何使用 client cache 或其他东西来输入表情符号的教程 但如何上传它们并获取它们的 ID 以在我的不和谐机器人中使用 我希望得到快速而简单的答案 lt
  • Google Analytics - 多个帐户的多个跟踪器?

    也许我的做法是错误的 但我希望我能得到一些见解 我为全国多个客户开发 我使用我的个人 开发分析帐户来跟踪我的许多网站 该帐户跟踪我所处理的所有域 配置文件 然而 现在营销人员也加入了进来 他们都希望安装自己的 GA 跟踪器 以及其他一些第三
  • 快速创建线程?

    我正在尝试快速生成一个线程 所以我有这一行 let thread NSThread target self selector doSomething object nil doSomething 是类范围内的函数 该行给出了这个错误 找不到
  • Java 的 SASS 实现? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找 Java 中的 SASS 实现 可以与 JSP JSF 一起使用 对于 Python 我找到了 CleverCSS 但对于 J
  • 把我从 IE6 中拯救出来

    我正准备开始为一家相当大的公司开发一个新的网络项目 对于他们的所有用户 大约 17 000 人 来说 他们都被 IE6 困住了 他们计划在今年年底前让所有人过渡到 IE7 但 IT 部门开始推迟这一承诺 我被要求做的是给项目发起人更多的支持
  • 臭名昭著的 java.sql.SQLException: 找不到合适的驱动程序

    我正在尝试将支持数据库的 JSP 添加到现有的 Tomcat 5 5 应用程序 GeoServer 2 0 0 如果有帮助的话 应用程序本身与 Postgres 通信得很好 所以我知道数据库已启动 用户可以访问它 所有这些都是好东西 我想要