我有一个桌面应用程序,它使用JDBC。每当我使用localhost时,我都没有JDBC的问题。现在,我要连接到不允许远程连接的服务器。我被建议提供一个Web服务作为我的应用程序和数据库之间的网关。
我能想到的另一种解决方案是寻找允许远程连接的mysql服务器。我发现很难找到可以清楚地理解java中的web服务的教程。我做了一些研究,我被告知我可以使用PHP编写Web服务并生成JSON文件,然后我可以在java中解析它。但是,如果我这样做,我的所有JDBC代码都必须被重新编码/删除。
是否可以在不删除JDBC代码的情况下远程连接到数据库?或者我可以将Tomcat与JDBC结合使用吗?谢谢!
这是我得到的......
线程“main”中的异常com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败 引起:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链路故障 引起:java.net.ConnectException:连接超时:连接
答案 0 :(得分:1)
您的问题似乎导致了与此类似的架构:
但与您的问题所暗示的不同 - 服务器端模块不会将桌面应用程序中的数据库查询中继到数据库 - 它充当桌面应用程序的服务器,成为客户端应用。
这意味着重新构建您的应用程序(不是我认为的真正的单词) - 但这是一种常见的最佳实践。服务器端模块负责对用户进行身份验证和授权,以确保没有人可以对数据库执行恶意活动。
这里没有简短的答案 - 您需要考虑这是否是您想要的方向。
其他人建议的替代方案是允许通过防火墙从桌面应用程序直接访问数据库。我假设你在这里发帖,因为负责数据库完整性的人告诉你不应该这样做。
答案 1 :(得分:0)
将数据库与Web服务连接起来是非常不可重复的。
以这种方式思考Web服务具有输入/输出模式。 所以你想用table1从table1获取数据。 table2 with method2等...
所以提供该数据库服务器的远程访问,这可能没问题。
答案 2 :(得分:0)
您可以在MySQL中允许远程连接。您将不得不根据其运行的服务器(here's一个用于debian)搜索特定指南。虽然如果您不相信运行应用程序的人员或数据库包含敏感数据,我强烈建议您不要这样做并使用PHP,因为它会引入许多安全问题。如果它只是在任何时候需要连接的IP地址,那么您应该只允许该IP地址连接,这将使安全漏洞变小。
答案 3 :(得分:0)
除了防火墙规则之外,没有什么能阻止您使用JDBC访问远程数据库。将数据库凭据公开到客户端通常被认为是一种不好的做法 - 即使代码中是硬编码的。这是一种架构上有缺陷的方法,不应考虑超过学校的家庭作业。
但是,如果您需要该解决方案,您将有以下选项可供查看: 1)检查运行Mysql的IP地址。它不能是localhost,而是像192.168.1.2等IP。 2)检查JDBC错误是否与身份验证相关,然后您需要向用户帐户添加权限。 MySQL安全模型将用户和用户可登录的IP绑定在一起。您可能需要纠正这些。
如果两者都正确,请发布使用JDBC时获得的确切异常。
答案 4 :(得分:0)
您不必使用网络服务。您可以实现任何形式的客户端/服务器通信,例如Web服务,REST,RMI,本机套接字等。值得研究这些并确定哪个是最合适的。然而....
这让我觉得这是一个架构问题,而不是围绕特定技术的问题。听起来像是你被引导到实现某些服务的道路上,这些服务不仅允许您访问数据库,还提供更丰富的API。例如您不希望您的客户端插入表中。您应该提供一个API来添加到购物篮。即你在不同的抽象层面工作(将来你可能会以完全不同的方式实现你的数据库而你不想改变你的客户。)
以上是Java EE世界中的标准模式,更广泛。
答案 5 :(得分:0)
我认为你不需要网络服务。要解决您的问题,您可以在MySQL服务器中启用远程访问。请按照this blog中提供的说明进行操作。如果您的MySQL服务器托管在Windows环境中,请同时参考this document。
之后,使用远程MySQL服务器域或IP地址更新JDBC URL。