我在jdbc,SQLite和java的DriveManager
中遇到了一些奇怪的错误。根据相应的java docs,DriveManager
能够自己加载所需的驱动程序,只要提供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()
。一些帮助将不胜感激。
答案 0 :(得分:3)
这取决于jdbc驱动程序的实现方式。在“旧”日期,您在加载驱动程序之前始终需要Class.forNames()
调用。使用jdbc ServiceLoader支持实现的“现代”驱动程序不再需要这个。基本上它归结为驱动程序jar是否具有相应的“META-INF / services / java.sql.Driver”条目。
所有这些都包含在DriverManager javadocs中。