我在JavaFX应用程序中使用SQLite 3作为数据库,为了将所有内容打包在一个文件中(这样用户除了启动.msi文件外就不需要做任何其他事情来安装它),我将数据库文件放在资源中,并使用JPackage打包我的整个应用程序,问题是在安装后,数据库文件保存在C:/Users/username/AppData/Local/Temp中,这不是存储重要数据的好地方(我应该提到,我的应用程序目录与C:/Users/username/Program files中的预期目录一样)。
我真的不知道为什么它们会分开(应用程序目录和数据库目录),为什么数据库文件会保存在一个临时文件中,有什么方法可以改变它们的目录吗?
详细信息:
private Connection connection;
private CashManagementDBConnector(){
try {
connection = DriverManager.getConnection("jdbc:sqlite::resource:DataBases/CashManagement.db");
} catch (SQLException e) {
e.printStackTrace();
}
}
日本广播公司
我用的是3.36.0.3的JDBC
京东版
java 17
思想
到目前为止,我认为问题来自JDBC
SQLite将资源连接< code > JDBC:SQLite::resource:blah . db 视为只读,因此它会将找到的资源复制为目录中的新数据库:
System.getProperty("java.io.tmpdir");
如果您不希望这样,在启动时,您可以让代码检查任何位置的特定数据库文件,例如:
Path mydb = Path.of(System.getenv("LOCALAPPDATA"), "MyAppName", "blah.db");
如果上述文件不存在,则可以在其上复制主资源文件:
final String resName= "/DataBases/CashManagement.db";
if (!Files.isRegularFile(mydb)) {
Files.createDirectories(mydb.getParent()); // if using subdir for app
try(var in = YourClass.class.getResourceAsStream(resName)) {
Objects.requireNonNull(in, () -> "Not found resource: "+resName);
Files.copy(in, mydb);
}
}
然后使用JDBC驱动程序复制资源:
try(Connection conn = DriverManager.getConnection("jdbc:sqlite:"+mydb.toAbsolutePath())) {
...
}
我使用jpack打包了我的java应用程序。当我使用打包的安装程序安装它时,安装后的目录始终是
我使用JPackage打包了我的java应用程序。当我安装它的时候,目录总是。我怎么更改它呢? 让我再澄清一次,我不是在讨论打包完成后打包的单个exe文件应该位于的输出目录。我说的是双击打包的exe文件后提取其内容的目录,默认情况下是 FIDA
所以我刚刚让jpackage使用一个基本的测试程序。我遇到了一个问题,这个问题从本质上决定了这个系统是否可以应用于实际项目。 要进行设置,Java程序的结构如下: 程序从此根目录运行。运行时程序所需的文件位于res文件夹中。因此,程序将执行类似以下操作:File f=new File(“res/File\u i\u need.png”) 。 我将其导出为一个罐子,现在我用jpackage将其打包。
以前我使用Izpack安装我的Java应用程序,当用户想要安装新版本时,他们只需重新安装到相同的位置(c“/Program files/jthink/jaikoz”),这将用较新的文件替换较旧的文件,用户不需要先卸载旧版本。 我现在已经为应用程序的最新版本构建了一个使用JPackage(现在是Java,JDK14的一部分)的安装程序,这将继续安装到相同的位置。问题是因为JPackage强制了一个新
问题 > 如果javajdk没有安装在linux操作系统上,jar将不会运行。 如果在linux中运行JavaFXJAR,就会出现如下错误 后来,我做了这个。成功了。 要使用终端运行java-fx应用程序,请遵循以下步骤: 安装openjfx(如果尚未安装): 列出javafx库位置: 输出如下: ./usr/usr/share/usr/share/doc/usr/share/doc/openjf