Java JDBC&x2B;SQLite:DriveManager未加载所需的驱动程序

Java JDBC&x2B;SQLite:DriveManager未加载所需的驱动程序,java,sqlite,jdbc,Java,Sqlite,Jdbc,我在jdbc、SQLite和java的DriveManager中遇到了一些奇怪的错误。根据相应的说明,DriveManager能够自己加载所需的驱动程序,只要提供jdbc。但是,对我来说,在使用SQLite时,这不起作用: Connection conn = DriverManager.getConnection("jdbc:sqlite://" + pathToFile + File.separator + "database.db"); 当执行此代码时,我得到一个SQLException:

我在jdbc、SQLite和java的
DriveManager
中遇到了一些奇怪的错误。根据相应的说明,
DriveManager
能够自己加载所需的驱动程序,只要提供jdbc。但是,对我来说,在使用SQLite时,这不起作用:

Connection conn = DriverManager.getConnection("jdbc:sqlite://" + pathToFile + File.separator + "database.db");
当执行此代码时,我得到一个SQLException:
没有找到适合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()
的情况下也可以正常工作。希望您能提供一些帮助。

这取决于jdbc驱动程序的实现方式。在“旧”时代,在加载驱动程序之前,您总是需要调用
Class.forNames()
。使用JDBCServiceLoader支持实现的“现代”驱动程序不再需要此功能。基本上,这取决于驱动程序jar是否具有适当的“META-INF/services/java.sql.driver”条目


所有这些都包含在javadocs中。

如果驱动程序没有提供服务定义,那么从技术上讲它不符合JDBC 4。感谢您的回答,您是对的。我觉得自己很愚蠢,没有意识到这一点。你认识一个有必要进入的司机吗?到目前为止,我在测试的这些数据库上没有任何运气。@e-任何数据库或特定数据库的驱动程序?@jtahlborn-最好是sqlite3。再次感谢。