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

JPackage(孵化器)和SQLite数据库问题

梁宪
2023-03-14

我可以再次使用一些帮助,出于想法。:(我正在制作将使用SQLite数据库的JavaFX应用程序。使用OpenJDK 14和OpenJFX14。在我的Eclipse中,一切都运行良好。我尝试测试使用JPackage制作安装程序,这也有效。当我开始安装应用程序时,它启动正常,但出于某种原因拒绝与数据库连接。

以下是我的项目结构:

我有一个按钮,当阶段加载时,我检查连接。它位于PocetnaController文件中:

    //testiranje konekcije nakon instalacije
@FXML
public void btnObracunClick(ActionEvent event) {
    lblStatus.setText(model.povezanaBaza());
}

这是来自PocetnaModel的代码,叫做:

    public String povezanaBaza() {
    this.konekcija = Konekcija.poveziBazu();
    return (this.konekcija != null) ? "Веза са базом успостављена" : "Повезивање са базом није успело.";
}

当为true时,它会以我的语言返回“数据库连接已建立”,当为false时返回“与数据库的连接失败”。

我重复一遍,在Eclipse中一切都很好。但是,当启动安装的应用程序时,我得到了“与数据库的连接失败”。所以连接出于某种原因返回null。

我的db文件被JPackage保存在/app文件夹中。我试着手动复制波雷斯。db到根文件夹,其中*。exe为。奇怪的是,状态标签在这种情况下不会改变。它应该,它必须返回真或假,我不明白。

这是开始时的舞台外观:

即使我在/app文件夹中重命名了数据库文件,所以找不到,我的连接仍然返回false并相应地更新状态,这是正常的。

以下是整个Konekcija文件,其中有一个负责连接的角色:

    public static Connection poveziBazu() {
    File baza = new File("Porez.db");
    try {
        if (baza.exists()) {
            Connection con = DriverManager.getConnection("jdbc:sqlite:Porez.db");
            return con;
        } else {
            return null;
        }
    } catch (Exception e) {
        return null;
    }
}

我的第一个怀疑是我创建的JAR有问题,但不能确定。在Eclipse中工作对我来说毫无意义,安装后也没有意义。

共有1个答案

苏翰学
2023-03-14

如果您使用以下命令运行jpack,您需要检查并可能修复以下几个地方:

 jpackage --name SQLiteTest --input C:\Users\Dalibor\Documents\NetBeansProjects\SQLiteTest\dist --main-jar SQLiteTest.jar --runtime-image hello\myjre

打开Windows控制台,以便可以看到它提供的错误消息-使用jpackage-win console。

安装JPacked版本后,请检查版本目录结构。

>

  • 确保它包含sqllite jdbc。jar文件。如果未找到,请修复您的目录以添加jar。

    检查应用程序xxx。生成的应用程序的cfg文件。它必须包含所有jar依赖项,包括sqlite jdbc。jar,例如:

    app.classpath=$ROOTDIR\app\jars\xxxx.jar;$ROOTDIR\app\jars\sqlite-jdbc.jar
    

    检查您用于构建运行时映像的jlink命令hello\myjre是否包含--add-模块java.sql以结合所需的SQL依赖项。

    jpack构建的安装程序创建的应用程序结构与Eclipse中的结构不同-文件位于app目录下,最重要的是该版本仅具有管理员权限可编辑。使用System属性java.launcher.path将SqlLite数据库的位置调整为可编辑位置,并且不屏蔽异常:

     public static Connection poveziBazu() {
         File baza = new File("Porez.db");
         String jhome = System.getProperty("java.launcher.path");
         if (jhome != null) {
             baza = new File(System.getProperty("user.home"), "Porez.db");
         }
         System.out.println("Connecting to "+baza.getAbsolutePath()+" exists()="+baza.exists());
         try {
             return DriverManager.getConnection("jdbc:sqlite:"+baza.getAbsolutePath());
         } catch (Exception e) {
             System.out.println("Failed connecting to: "+baza);
             throw new RuntimeException("Failed to open or create db: "+baza, e);
         }
     }
    

  •  类似资料:
    • 构建一个基本的基于sqlite的登录/注册应用程序。点击登录后App崩溃。 有什么想法吗? databaseHelper.java: display.java: contact.java:

    • 然而,敬虔加上知足的心便是大利了,因为我们没有带什么到世上来,也不能带什么去,只要有衣有食,就当知足。但那些想要发财的人,就陷在迷惑、落在网罗和许多无知有害的私欲里,叫人沉在败坏和灭亡中。贪财是万恶之根。有人贪恋钱财,就被引诱离了真道,用许多愁苦把自己刺透了。(1 TIMOTHY 6:6-10) SQLite数据库 SQLite是一个小型的关系型数据库,它最大的特点在于不需要服务器、零配置。前面的

    • 创建数据库之后,如何执行DDL语句来创建表?

    • 问题内容: 我正在寻找一种使用Swift代码在我的应用程序中访问SQLite数据库的方法。 我知道我可以在Objective C中使用SQLite包装器并使用桥接头,但是我希望能够完全在Swift中完成此项目。如果可以的话,有没有办法做到这一点,有人可以将我指向一个引用,该引用显示了如何提交查询,检索行等。 问题答案: 虽然您可能应该使用许多SQLite包装器之一,但如果您想知道如何自己调用SQL

    • 你能帮我解决缺栏的问题吗?在我看来,我做的每件事都是对的,但我得到的错误是,某一列有问题。 错误 E/SQLiteLog:(1)没有这样的列:Stezenie D/AndroidRuntime:关闭VM E/AndroidRuntime:致命异常:主进程:com。实例apkadlapacjenta,PID:11261 java。lang.RuntimeException:无法启动活动组件信息{co

    • Django的数据库层提供了很多方法来帮助开发者充分的利用他们的数据库。这篇文档收集了相关文档的一些链接,添加了大量提示,并且按照优化数据库使用的步骤的概要来组织。 性能优先 作为通用的编程实践,性能的重要性不用多说。弄清楚你在执行什么查询以及你的开销花在哪里。你也可能想使用外部的项目,像django-debug-toolbar,或者直接监控数据库的工具。 记住你可以优化速度、内存占用,甚至二者一