【发布时间】:2021-11-23 03:35:20
【问题描述】:
我选择将我的 SQLite 数据库文件放在本地资源中,并使用 JPackage 打包我的应用程序。
问题是每当我从桌面删除应用程序并重新安装它时,数据库数据不会被删除(删除应用程序),所以我假设本地资源被保存在桌面上的其他地方(安装应用后)除了应用目录之外,如何找到它们的保存位置?
我正在使用 JLink-badass 插件来打包它,这里是它的参数:
jlink {
jpackage {
installerName = 'demo'
installerType = 'msi'
installerOptions = [
'--description', 'demo',
'--copyright', 'Copyrigth 2021-2021 demo'
]
installerOptions += ['--win-menu', '--win-shortcut']
}
launcher {
name = 'demo'
【问题讨论】:
-
但是你只能将它用作只读数据库,我什至不知道你是否可以将数据库作为资源连接。我更喜欢在首次启动时将此类资源复制到外部文件夹中。
-
@mipa 您可以连接到数据库作为资源。我在将资源复制到外部文件夹时遇到的问题(以 /src/main 目录为例)是在将我的应用程序打包后,我的数据库的目录发生了变化,因此应用程序不再连接到它
-
你误解了我的评论。我的意思是向您的应用程序添加一些代码,当您的用户首次在他们的系统上启动它时,将打包的数据库提取到某个外部文件夹(如
/.myapp/)。这是应用程序将数据存储在某个应用程序特定文件夹中的典型行为。 -
@slaw 我最终在 \AppData\Local\Temp 目录中找到了资源文件(只是数据库文件),这解释了为什么删除应用程序后数据库数据没有被删除,仍然不知道为什么他们被保存在那里,我怎样才能让他们被保存在应用程序目录中。
-
假设您使用的是“xerial”驱动程序,看起来它会将资源提取到一个临时文件中。您可以在the source code 中看到这一点。尽管如果资源的最后修改时间更近,它看起来也会删除任何现有的临时数据库文件。无论如何,也许 SQLite 库无法处理对 JAR 文件中嵌入的数据库文件的操作,因此驱动程序别无选择,只能将其提取到真实文件中。
标签: javafx windows-installer java-11 jlink jpackage