【发布时间】:2020-08-13 23:20:49
【问题描述】:
我有一个 JavaFX 应用程序,它使用连接到 SQLite
Connection connection = DriverManager.getConnection("jdbc:sqlite:data.sqlite");
我的 pom 文件中有 SQLite 驱动程序的依赖项:
<dependency>
<groupId>org.xerial</groupId>
<artifactId>sqlite-jdbc</artifactId>
<version>3.32.3.2</version>
</dependency>
我可以使用 Maven 目标 javafx:compile 和 javafx:run 顺利运行应用程序,一切正常,应用程序查询数据库没有问题。在项目的根文件夹(与src/ 和pom.xml 相同的文件夹)上创建data.sqlite 文件。
但是,当我尝试运行使用jlink 构建的可执行文件时,我收到了线程标题中描述的错误。首先,我运行了 maven 目标 javafx:jlink。这会在target/image/ 生成一些东西。我导航到target/image/bin 并运行./java -m <name-of-my-module>/<group-id>.App,这是运行我构建的文件的命令。然后我得到:
No suitable driver found for jdbc:sqlite:data.sqlite
还有一个NullPointerException,因为数据库初始化例程试图访问我的数据库连接。我怎样才能解决这个问题?提前致谢。
编辑:似乎解决方案与在调用DriverManager.getConnection() 之前添加Class.forName() 语句有关。我尝试执行以下操作:
Class.forName("org.sqlite.JDBC");
Connection connection = DriverManager.getConnection("jdbc:sqlite:data.sqlite");
通过这样做,现在应用程序呈现!但是,它仍然崩溃。我得到ClassNotFoundException: org.sqlite.JDBC。任何提示...?
【问题讨论】:
-
使用“现代”(Java 6+?)JDBC 驱动程序,不再需要 Class.forName
-
你能检查一下 sqlite-jdbc 是否是生成的运行时映像的一部分吗?