我对为Apache Derby加载数据库驱动程序感到困惑。 在它的文档中,据说:
"如果您的应用程序在JDK 6或更高版本上运行,则不需要 显式加载EmbeddedDriver。在那个环境中,驱动程序 自动加载。" https://db.apache.org/derby/docs/10.7/devguide/cdevdvlp40653.html
我的连接网址是:
jdbc:derby:testdb;create=true
当我尝试连接到Java Derby而不加载驱动程序时,我总是收到以下错误:
Error: java.sql.SQLException: No suitable driver found for jdbc:derby:testdb
如果我通过添加以下行明确加载驱动程序,则错误消失。
Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
现在我的问题是为什么我需要明确加载此驱动程序?我在Eclipse上运行我的数据库应用程序,引用了JRE7。为什么不自动加载?
答案 0 :(得分:1)
此行为是JDK的DriverManager类的责任,而不是Derby本身的责任。您可以在此处阅读DriverManager类:http://docs.oracle.com/javase/7/docs/api/java/sql/DriverManager.html
所有Derby都是为JDBC驱动程序提供正确的META-INF。
我认为DriverManager行为可能取决于您的CLASSPATH的详细信息。
如果系统CLASSPATH中的derby.jar,将自动加载。但是,如果derby.jar位于具有单独的类加载器的容器中,例如servlet容器,应用程序服务器或复杂的IDE,则不会在DriverManager初始化时搜索的类中。
答案 1 :(得分:0)
奇怪。我一直这样做(但不是Eclipse)没有问题。您是否使用DriverManger.getConnection()来获取连接?我假设您使用的是Derby 10.7或更新版本?