4

我在使用 jdbc、SQLite 和 java 时遇到了一些奇怪的错误DriveManager。根据对应的java docsDriveManager只要提供jdbc,就可以自己加载需要的驱动。但是,对我来说,这在使用 SQLite 时不起作用:

Connection conn = DriverManager.getConnection("jdbc:sqlite://" + pathToFile + File.separator + "database.db");

执行此代码时,我得到一个 SQLException:No suitable driver found for jdbc:sqlite:pathToFile\database.db通常我会假设 jdbc 不是应该的,但是,由于某种原因,以下工作:

Class.forName("org.sqlite.JDBC");
Connection conn = DriverManager.getConnection("jdbc:sqlite://" + pathToFile + File.separator + "database.db");

这让我完全不知道为什么第一个版本不起作用。附带说明一下,遵循相同实现的 MySQL 无需使用Class.forName()也可以正常工作。一些帮助将不胜感激。

4

1 回答 1

3

这取决于 jdbc 驱动程序是如何实现的。在“旧”时代,您总是需要Class.forNames()在加载驱动程序之前调用。使用 jdbc ServiceLoader 支持实现的“现代”驱动程序不再需要这个。基本上归结为驱动程序 jar 是否具有适当的“META-INF/services/java.sql.Driver”条目。

所有这些都包含在DriverManager javadocs 中。

于 2012-11-30T01:13:54.633 回答