3

我有一个桌面应用程序,它使用 JDBC。每当我使用 localhost 时,我对 JDBC 没有任何问题。现在,我要连接到不允许远程连接的服务器。有人建议我提供一个 Web 服务作为我的应用程序和数据库之间的网关。

我能想到的另一种解决方案是,寻找允许远程连接的 mysql 服务器。我发现很难找到可以清楚地理解 Java 中的 Web 服务的教程。我做了一些研究,有人告诉我可以使用 PHP 编写 Web 服务并生成 JSON 文件,然后我可以在 java 中解析它。但如果我这样做,我所有的 JDBC 代码都必须重新编码/删除。

是否可以在不删除我的 JDBC 代码的情况下远程连接到数据库?或者我可以将 Tomcat 与 JDBC 结合起来吗?谢谢!

这就是我得到的..

线程“主”com.mysql.jdbc.exceptions.jdbc4.CommunicationsException 中的异常:通信链接故障原因:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接故障原因:java.net.ConnectException:连接计时出:连接

4

6 回答 6

1

您的问题似乎导致了类似于以下的架构: http://yuml.me/2cc6bd7f

但与您的问题所暗示的不同 -服务器端模块不会将数据库查询从桌面应用程序中继到数据库 - 它充当成为客户端应用程序的桌面应用程序的服务器。

这意味着重新构建您的应用程序(我认为不是一个真实的词) - 而是一种常见的最佳实践。服务器端模块负责对您的用户进行身份验证和授权,以确保没有人可以对数据库执行恶意活动。

这里没有简短的答案——你需要考虑这是否是你想要的方向。

其他人建议的替代方法是允许从桌面应用程序通过防火墙直接访问数据库。我假设您在此处发帖,因为负责数据库完整性的人员告诉您不应该这样做。

于 2013-03-25T12:06:37.867 回答
0

将数据库与 Web 服务连接起来是非常不推荐的。

以这种方式认为 Web 服务具有输入/输出模式。所以你想用method1从table1中获取数据。表 2 与方法 2 等...

所以为该数据库服务器提供远程访问,这可能很好。

于 2013-03-25T11:50:37.170 回答
0

您可以在 MySQL 中允许远程连接。您将不得不根据运行它的服务器搜索具体指南(这里是debian 的指南)。尽管如果您不信任运行应用程序的人员或数据库包含敏感数据,我强烈建议您不要这样做,而是使用 PHP,因为它会引入很多安全问题。如果在任何时候只有一个 IP 地址需要连接,您应该只允许该 IP 地址连接,这将使安全漏洞更小。

于 2013-03-25T11:51:29.760 回答
0

您不必使用网络服务。您可以实现任何形式的客户端/服务器通信,例如 Web 服务、REST、RMI、本机套接字等。研究这些并确定哪种最合适是值得的。然而....

这让我觉得这是一个架构问题,而不是围绕特定技术的问题。在我看来,您正在被引导实现一些服务,这些服务不仅允许您访问数据库,而且提供更丰富的 API。例如,您不希望您的客户插入表格。您应该提供一个 API 以添加到购物篮。即您在不同的抽象级别上工作(将来您可能会以完全不同的方式实现您的数据库,并且您不想更改您的客户)。

以上是 Java EE 世界和更广泛的标准模式。

于 2013-03-25T11:54:49.413 回答
0

我认为您在这里不需要网络服务。要解决您的问题,您可以在 MySQL 服务器中启用远程访问。请按照此博客中提供的说明进行操作。如果您的 MySQL 服务器托管在 Windows 环境中,请参阅此文档

之后使用远程 MySQL 服务器域或 IP 地址更新您的 JDBC URL。

于 2013-03-25T12:02:32.577 回答
0

除了防火墙规则之外,没有什么可以阻止您使用 JDBC 访问远程数据库。将您的数据库凭据暴露给客户端通常被认为是一种不好的做法 - 即使在代码中进行了硬编码。这是一种在架构上存在缺陷的方法,不应仅考虑学校作业。

但是,如果您需要解决方案,您可以查看以下选项: 1) 检查运行 Mysql 的 IP 地址。它不能是 localhost,而是像 192.168.1.2 之类的 IP。 2) 检查 JDBC 错误是否与 Authentication 相关,然后您需要为用户帐户添加权限。MySQL 安全模型将用户名和用户可以登录的 IP 联系起来。您可能需要更正这些。

如果两者都正确,请发布您在使用 JDBC 时遇到的确切异常。

于 2013-03-25T11:53:07.783 回答