1

我正在尝试完成本教程:

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

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

我做了本教程中的所有内容,但是当我尝试运行我的代码时,出现以下错误:

javax.servlet.jsp.JspException:无法获得连接,数据源无效:“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 对象的情况下连接到数据库但无法连接到数据库?

4

8 回答 8

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 文件并保存并运行文件(在文件内右键单击并按“运行文件”)。

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

于 2015-07-02T19:26:47.880 回答
2

我有同样的错误,

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

资源类型:javax.sql.ConnectionPoolDataSource

尝试使用:

资源类型:=javax.sql.DataSource

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

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

但在屏幕截图上是正确的。

于 2014-07-31T09:11:13.090 回答
1

我对电子商务教程的这个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 在步骤 6 设置 JDBC 数据源和连接池 -> 将资源类型更改为 javax.sql.ConnectionPoolDataSource

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

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

于 2015-02-20T06:31:24.183 回答
1

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

于 2016-09-22T03:47:10.627 回答
0

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

于 2013-08-16T12:16:23.677 回答
0

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

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

我认为它会起作用。

于 2013-06-29T10:12:21.947 回答
0

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

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

于 2016-08-03T00:54:10.700 回答
0

这里同样的问题。我花了几个小时,尝试了这里提供的一些解决方案,只有一个让我更进一步:将资源类型从“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 库添加到您的项目中。

于 2016-12-01T15:54:05.270 回答