如何在完成Java桌面应用程序和MySQL数据库后创建安装程序?

8
我已经完成了一个使用mySQL数据库的Java桌面应用程序。我希望让该应用程序在NetBeans之外运行,并安装在其他计算机上。我知道如何构建项目并创建可运行的jar文件,但这需要我将数据库本身导出到我想要在其上运行应用程序的其他计算机上。
我的问题有两个部分:
1)是否有一种方法可以创建一个安装包,同时安装数据库和应用程序?
2)此外,我的数据库路径是硬编码的,这是否意味着每次为某人安装我的应用程序时都必须更改代码?有什么更好的方法吗?
谢谢
3个回答

8
  1. 可以使用一些安装程序,例如InnoSetup。但是,个人而言,我喜欢给我的客户一个zip文件,他们可以将其解压到任何地方。可执行的jar文件应该能够自己处理所有事情(我喜欢无需安装软件,只需解压并运行)。
  2. 如果是硬编码的,则需要使用属性或配置文件来存储路径和其他软件依赖的外部内容。软件应该从这些文件中读取。在启动时检查是否存在此类文件-如果缺少,应向用户显示窗口,以便输入配置信息。

至于使用代码部署MySQL-考虑使用服务器进行部署,这样您的用户就不必安装MySQL,而是通过网络连接到它。如果您仅需要数据库来本地存储数据,为什么不使用SQLite或类似的基于文件的数据库引擎呢?

以上答案仅供参考,并更多地反映了我的思考方式。我很乐意听取有经验的人的意见。尽管如此,我希望这些答案能够有所帮助 :)


这是URL,它在本地主机的3306端口上。我应该保持这样的设置并为我的客户安装MySQL以便快速安装吗? - Saher Ahwal
2
这属于本地存储数据,你可能会考虑使用SQLite,在我看来这是一个更好的选择。但是,如果你真的想坚持使用MySQL,那么url、端口、用户名和密码应该保存在某个配置文件中(明显要进行编码,以便不是明文存储密码)。当然,这意味着每个客户端必须安装MySQL。最终,如果在局域网中,可以在一台机器上设置MySQL服务器,让其他机器连接它。这样,您就不必为所有用户安装客户端,只需要安装一个即可。 - Miki
非常感谢,但还有一个问题:关于我之前问的第一个问题,您是否创建了整个项目的zip文件?我不希望客户能够访问Java代码,但是仅提供jar文件夹本身是不起作用的。 - Saher Ahwal
1
该jar文件只能包含已编译的.class文件。然后,.zip文件应该只包含jar文件、文档、外部库等。如果不想包含源代码,也没有必要;一旦代码被编译,它就可以在计算机和平台之间移动。虽然可能会对.class文件进行反向工程,但生成的代码基本上是无法阅读的。 - Miki

3

我同意Sorrow的观点。

如果必须使用MySQL,通常是通过网络进行访问,因为我不想让客户自己安装MySQL。如果你被迫在本地使用MySQL,可以尝试使用MySQL无人值守安装+NSIS安装程序。

如果可以使用任何数据库,我会选择javadb/derby。它已经捆绑在大多数Java安装包中,如果没有,只需要将一个jar文件添加到应用程序中即可。

至于“硬编码”路径,我真的不明白你的意思。你实际上并没有“路径”,我猜你指的是连接字符串。你不必硬编码连接字符串,只需将一些参数放入属性文件中,并从中构建连接字符串即可。


1
1)我是否可以创建一个安装文件,将数据库和应用程序一起安装?
请参考我的回答Java based Standalone application
2)我的数据库路径是硬编码的,这意味着每次为某个人安装我的应用程序时都必须更改代码,有更好的方法吗?
让DB安装程序弹出JFileChooser,询问用户想要安装DB的位置。使用JNLP API PersistenceService存储该路径。这是我的PersistenceService演示

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接