Glassfish - 尝试连接数据源时没有适合 mysql 的驱动程序

Posted

技术标签:

【中文标题】Glassfish - 尝试连接数据源时没有适合 mysql 的驱动程序【英文标题】:Glassfish - No suitable driver for mysql when trying to connect with datasource 【发布时间】:2013-06-29 09:43:13 【问题描述】:

我正在努力完成本教程:

https://netbeans.org/kb/docs/javaee/ecommerce/connect-db.html

其中一部分是设置数据库并尝试使用数据源和连接池建立连接。

我完成了教程中的所有操作,但是当我尝试运行我的代码时,出现以下错误:

javax.servlet.jsp.JspException:无法获取连接,DataSource 无效:“java.sql.SQLException:找不到适合 jdbc/affablebean 的驱动程序”

这是抛出它的代码:

<sql:query var = "result" dataSource = "jdbc/affablebean">
        SELECT * FROM category, product
        WHERE category.id = product.category_id
</sql:query>

我尝试在不使用连接池和数据源的情况下连接到数据库,它的工作原理非常棒。

try 
        Class.forName("com.mysql.jdbc.Driver");
        System.out.println("Driver registered");
     
    catch (ClassNotFoundException ex) 
        Logger.getLogger(SqlService.class.getName()).log(Level.SEVERE, null, ex);
    

这意味着驱动程序位于 glassfish 目录中的正确 lib 文件夹中,因此问题一定出在其他地方。

本教程有一个故障排除部分,其中描述了如果我收到这种错误“没有为 jdbc/affablebean 找到合适的驱动程序”,这意味着我的 web.xml 中没有资源引用。嗯...我有一个,它是:

<resource-ref>
    <description>Connects to database for AffableBean application</description>
    <res-ref-name>jdbc/affablebean</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>

我每天 16 个小时都在尝试解决这个问题超过两天,但仍然没有运气。

你们有什么想法吗? 我浏览了所有 google 和 *** 并发现了类似的问题,但他们给出的解决方案是“确保 mysql 驱动程序位于服务器上的正确文件夹中”。

为什么我在没有dataSource对象的情况下连接到数据库却无法连接?

【问题讨论】:

您需要从 Netbeans 创建名为 jdbc/affabelbean 的数据源。 我做了教程中描述的所有事情。好像你不知道我的问题的答案,所以我不明白评论的意义 @JoroSeksa 你是否在项目库中添加了 mysql jdbc 驱动程序?? Glassfish 自动部署驱动程序。我没有手动添加。奇怪的是我使用 Class.forName 连接到数据库 我在 Glassfish4 中遇到了完全相同的问题,但同样的应用程序在 GF3 中运行良好。所以很容易证明这是GF4中的一个错误。你用的是什么应用服务器? 【参考方案1】:

所以我找到了解决我遇到的完全相同的问题的方法。 所以看来问题出在 web.xml 中,不包含对数据源的引用。 只需添加,

<resource-ref>
    <description>AffableBean DataSource</description>
    <res-ref-name>jdbc/affablebean</res-ref-name>
    <res-type>javax.sql.ConnectionPoolDataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

到您的 web.xml 文件并保存并运行文件(在文件内右键单击并按“运行文件”)。

之后,您应该会在您选择的浏览器中看到数据库选项卡弹出。

【讨论】:

【参考方案2】:

我有同样的错误,

设置资源类型时出现问题:

资源类型:javax.sql.ConnectionPoolDataSource

尝试使用:

资源类型:=javax.sql.DataSource

教程文本中奇怪的是(问题):

单击下一步。在步骤 5,添加连接池属性中,指定 以下详细信息:数据源类名: com.mysql.jdbc.jdbc2.optional.MysqlDataSource 资源类型: javax.sql.ConnectionPoolDataSource 说明:(可选)连接到 affablebean 数据库

但屏幕截图是正确的。

【讨论】:

【参考方案3】:

我对此有几个问题 https://netbeans.org/kb/docs/javaee/ecommerce/connect-db.html 电子商务教程的一部分。

由于 jdbc 资源创建不当而出现第一个问题(没有合适的驱动程序) - 我使用了“新文件 \ glassfish \ jdbc 连接池” 而不是“新文件 \ glassfish \ jdbc 资源”。

重做此步骤已正确注册驱动程序并创建池 (在 glassfish 服务器日志中表明 mysql 驱动程序确实在服务器实例上注册)。

之后我无法通过 testDataSource.jsp 获取数据 - 错误是 org.apache.derby.client.am.SqlException: Table/View 'CATEGORY' 不存在。

我不明白为什么 org.apache.derby.client 甚至被提及 经过一番查找,在 netbeans 论坛上找到了讨论: https://forums.netbeans.org/ntopic61746.html

这部分讨论是我的案例的解决方案:

尝试更改步骤设置文件 sun-resources.xml 或 glassfish-resources.xml 设置 JDBC 数据源和连接池 在第 6 步 -> 将资源类型更改为 javax.sql.ConnectionPoolDataSource

并更改步骤设置文件 web.xml 从应用程序引用数据源 在第 4 步 -> 将资源类型更改为 javax.sql.ConnectionPoolDataSource

附言我正在使用 netbeans 8.0.2、glassfish 4.1 和 jdk1.7.0_21。 Netbeans 中没有 javax.sql.ConnectionPoolDataSource 选项 web.xml 的“编辑资源引用\资源类型”组合框的界面。 所以我手动把这个值放在那里。

【讨论】:

感谢您的反馈,乔罗。这是我在这里的第一篇文章。 我的仍然不起作用...它仍然给出“javax.servlet.ServletException: javax.servlet.jsp.JspException: Unable to get connection, DataSource invalid:”java.sql.SQLException:没有为 jdbc/affablebean 找到合适的驱动程序" "我正在使用 glassfish 4.1.1【参考方案4】:

经过非常烦人的研究,检查了服务器 tomcat、wildfly 和 Jboss,似乎都没有工作,我在使用 glassfish 注册新数据源时遇到问题,添加新的 jdbc 连接池会抛出 java.lang.runtimeexception,解决方法问题是在管理控制台中的 jdbcconnection 池下重新配置 DerbyPool,并为其提供所需的数据源类名、url、用户名和密码,以将其指向 mysql 服务器上的数据库。它确实有效。

【讨论】:

【参考方案5】:

我认为您没有在项目库中添加 Mysql JDBC Driver

在您的项目库中手动添加Mysql JDBC Driver,然后重试。

我认为它会起作用。

【讨论】:

【参考方案6】:

我有确切的问题,甚至通过 Netbeans IDE,DB 连接测试很好,而在 Glassfish 4 中,它不起作用,尝试所有可能的方法,比如在项目中包含 lib,到处放。最后通过删除 Glassfish 并安装 Glassfish 3.1.2.2 解决了问题,项目文件完全相同并且工作正常。猜猜这是 Glassfish 4 中可能需要的错误或特殊设置。

【讨论】:

【参考方案7】:

我有同样的问题。过去 4 小时我一直在寻找解决方案,这对我来说太容易了……

确保 JDBC 资源(在 Glassfish 管理控制台)中的“状态”已启用(选中复选框):-(

【讨论】:

【参考方案8】:

同样的问题。我花了几个小时,尝试了这里提供的一些解决方案,只有一个让我更进一步:将资源类型从“javax.sql.ConnectionPoolDataSource”更改为“javax.sql.DataSource”。 我立即偶然发现了下一个问题:表“类别”不存在。它确实存在。 我放弃了 glassfish(这是我第一次尝试使用 glassfish)并回到 Tomcat。成功!所以我决定向人们指出另一个对我有用的可能解决方案可能会有所帮助。 对于那些对 Tomcat 解决方案感兴趣的人,请访问此页面http://tomcat.apache.org/tomcat-8.0-doc/jndi-datasource-examples-howto.html#MySQL_DBCP_Example。举例说明非常清楚。并且不要忘记将 JSTL 库添加到您的项目中。 祝你好运。

【讨论】:

请考虑从链接中简要描述解决方案,以便如果链接断开,答案仍然有价值。

以上是关于Glassfish - 尝试连接数据源时没有适合 mysql 的驱动程序的主要内容,如果未能解决你的问题,请参考以下文章

GlassFish 为防止内存泄漏,已强制注销 JDBC 驱动程序

GlassFish 无法连接到 mysql (XAMPP)

JDBC连接池设置无法在Glassfish5上运行

glassfish JDBC 连接池

配置 GlassFish JDBC 连接池以处理 Amazon RDS 多可用区故障转移

Glassfish 4.1 + Hibernate 5.2 连接