当前位置: 首页 > 知识库问答 >
问题:

安装我的应用程序后如何控制SQLite 3数据库文件目录(使用JPackage打包)

谭献
2023-03-14

我在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

共有1个答案

益承颜
2023-03-14

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