繁体   English   中英

Java Desktop Application连接到数据库

[英]Java Desktop Application to connect to database

我有一个桌面应用程序,它使用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:连接定时出:连接

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

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

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

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

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

将数据库与Web服务连接起来是非常不可重复的。

以这种方式思考Web服务具有输入/输出模式。 所以你想用table1从table1获取数据。 table2 with method2等...

所以提供该数据库服务器的远程访问,这可能没问题。

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

除了防火墙规则之外,没有什么能阻止您使用JDBC访问远程数据库。 将数据库凭据公开到客户端通常被认为是一种不好的做法 - 即使代码中是硬编码的。 这是一种架构上有缺陷的方法,不应考虑超过学校的家庭作业。

但是,如果您需要该解决方案,您将有以下选项可供查看:1)检查运行Mysql的IP地址。 它不能是localhost,而是像192.168.1.2等IP。2)检查JDBC错误是否与身份验证相关,然后您需要向用户帐户添加权限。 MySQL安全模型将用户和用户可登录的IP绑定在一起。 您可能需要纠正这些。

如果两者都正确,请发布使用JDBC时获得的确切异常。

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

这使我成为一个架构问题,而不是围绕特定技术的问题。 听起来像是你被引导到实现某些服务的道路上,这些服务不仅允许您访问数据库,还提供更丰富的API。 例如,您不希望您的客户端插入表中。 您应该提供一个API来添加到购物篮。 即你在不同的抽象层面工作(将来你可能以完全不同的方式实现你的数据库而你不想改变你的客户)。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM