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

时间:2013-06-29 09:43:14

标签: java jdbc glassfish

我正在尝试完成本教程:

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和stackoverflow并发现了类似的问题,但他们给出的解决方案是“确保mysql驱动程序位于服务器上的正确文件夹中”。

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

8 个答案:

答案 0 :(得分:3)

所以我找到了我遇到的完全相同问题的解决方案。 所以看来问题是在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文件并保存并运行文件(在文件中右键单击并按&#34;运行文件&#34;)。

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

答案 1 :(得分:2)

我有同样的错误,

设置resource-type时出现问题:

  

资源类型:javax.sql.ConnectionPoolDataSource

尝试使用:

  

资源类型:= javax.sql.DataSource

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

  

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

但截图是正确的。

答案 2 :(得分:1)

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

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

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

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

我无法弄清楚为什么甚至会提到org.apache.derby.client 经过一些查找在netbeans论坛上发现讨论: https://forums.netbeans.org/ntopic61746.html

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

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

并在步骤设置文件web.xml中进行更改 引用应用程序中的数据源 在步骤4 - &gt;将资源类型更改为javax.sql.ConnectionPoolDataSource

P.S。我使用netbeans 8.0.2,glassfish 4.1和jdk1.7.0_21。 Netbeans&#39;中没有javax.sql.ConnectionPoolDataSource选项。 用于编辑资源引用\资源类型的界面&#39;用于web.xml的combobox。 所以我手动将这个值放在那里。

答案 3 :(得分:1)

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

答案 4 :(得分:0)

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

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

我认为它会奏效。

答案 5 :(得分:0)

我有完全的问题,甚至通过Netbeans IDE,数据库连接测试很好,而在Glassfish 4中,它无法正常工作,尝试所有可能的项目包括lib,放在这里和那里。最后通过删除Glassfish并安装Glassfish 3.1.2.2修复问题,项目文件完全相同并且工作正常。猜猜这是Glassfish 4中可能需要的bug或specail设置。

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

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