2

我有一个想要分发的程序,但没有提供使用的源代码或数据库。它是一个 sqlite 数据库,不需要更新。我尝试使用 eclipse fatjar 并更改查找 jar 的位置,但是当我运行程序时,它只是在与 jar 相同的目录中创建一个空白数据库文件。我只想要一个可以分发的文件。


从被认为相关的评论中:

..在使用 TXT 文件测试后包含 XML。

我会,但这个数据库有 80,000 行长,有 4 列。它只会随着程序的更新而变得更大,而不是在运行时。

将其放在服务器上并具有 Web 界面。

我真的想避免使用任何互联网连接。如果有人想反编译jar,我不在乎。我只是希望它可以通过双击来工作,并且没有多余的文件。

4

3 回答 3

2

(部署)..可用性和整洁对我来说很重要

这让我认为真正需要的是跨平台安装程序。用户获取一个文件并双击它,“按照提示”(如果需要任何提示)并提取应用程序。准备启用。

它可能会创建多个文件,但这对最终用户来说在很大程度上是不可见的。'不在现场是疯了'。

我想避免使用任何互联网连接..

我建议你重新考虑一下。什么大小的应用程序。Jar'd 什么时候来?几兆?在当今互联网流量大的时代,这算不了什么。那是 2 分钟的 YouTube。

具有互联网连接的设备与具有(例如)CD/DVD 驱动器以加载软件的机器的比率也在发生变化。现在,能够运行 J2SE 的机器拥有 Internet 连接的机器比拥有驱动器的机器还多。我有一台可以运行 J2SE 的台式机和上网本。两者都有互联网连接,但只有台式电脑有 CD/DVD 驱动器。

如果是这种情况(说到我的意思),请查看Java Web Start来部署应用程序。和数据库。非常用户友好,具有良好的桌面集成。

它大约是 50mb,但问题是并非所有最终用户都可以随时访问互联网。可以通过 Internet 分发应用程序,但我不想依赖它来访问数据库或一起加载应用程序。

那是没有必要的。JWS 在本地缓存应用程序资源。它将检查服务器是否有更新的 Jars,但可以配置为允许从缓存副本启动,即使当时没有互联网连接。要配置的启动文件元素如下所示:

<update check="always" policy="prompt-run"> 
于 2012-06-13T22:14:39.033 回答
1

不知道您是否可以使用 SQLite 数据库执行此操作,但 Derby 支持 jar:路径:http ://db.apache.org/derby/docs/dev/devguide/cdevdvlp17453.html

或者,在启动时将数据库从 jar 提取到文件系统并指向那里。

于 2012-06-13T22:03:08.210 回答
1

我认为您可以执行以下操作:

  • 将您的数据库打包到类路径中。
  • 当应用程序加载时,将数据库复制到某个临时目录(如 /tmp)
  • 指示 sqlite 从那里读取它(通过设置 jdbc url)
  • 添加一个 jvm 挂钩以在应用程序关闭时删除文件。

这应该像一个魅力。

暗示:

用于getClass().getResourceAsStream();获取类路径上文件的引用。

于 2012-06-13T22:26:32.033 回答