如何在内部导出带有sqlite数据库的jar?

时间:2012-06-13 21:42:56

标签: java eclipse sqlite deployment jar

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


从认为相关的评论:

  

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

我愿意,但这个数据库长80,000行,有4列。只有在程序更新时才会变大,而不是在运行时。

  

将它放在服务器上,并有一个Web界面。

我想避免真正使用任何互联网连接。如果有人想要反编译jar,无论我不关心。我只是想通过双击工作,并且没有额外的文件。

3 个答案:

答案 0 :(得分:2)

  

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

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

它可能会创建多个文件,但这对最终用户来说基本上是不可见的。 “不在网站之外”。

  

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

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

具有互联网连接的设备与具有(例如)CD / DVD驱动器以加载软件的机器的比率也在变化。它正处于能够运行J2SE的更多机器具有互联网连接而不是驱动器的时代。我有一台桌面PC和一台可以运行J2SE的上网本。两者都有互联网连接,但只有台式电脑有CD / DVD驱动器。

如果是这种情况(说到我的观点),请Java Web Start部署应用程序。和DB。非常用户友好,具有良好的桌面集成。

  

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

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

<update check="always" policy="prompt-run"> 

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

我认为你可以做到以下几点:

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

这应该像魅力一样。

提示:

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