2014-03-25 47 views
0

我對加載Apache Derby的數據庫驅動程序感到困惑。 在它的文檔中,說:未自動加載Apache Derby驅動程序

"If your application runs on JDK 6 or higher, you do not need to explicitly load the EmbeddedDriver. In that environment, the driver loads automatically." https://db.apache.org/derby/docs/10.7/devguide/cdevdvlp40653.html


我的連接網址是:

jdbc:derby:testdb;create=true 


當我嘗試連接到Java德比無需加載驅動程序時,我總是得到以下錯誤:

Error: java.sql.SQLException: No suitable driver found for jdbc:derby:testdb 


如果我通過添加以下行來顯式加載驅動程序,錯誤消失。

Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance(); 


現在我的問題是,爲什麼我應該需要明確加載此驅動程序?我正在Eclipse上運行我的數據庫應用程序,並引用了JRE7。爲什麼它不會自動加載?

回答

1

此行爲是JDK的DriverManager類的責任,而不是Derby本身的責任。您可以在此處閱讀有關DriverManager類的信息:http://docs.oracle.com/javase/7/docs/api/java/sql/DriverManager.html

Derby所做的一切都是爲JDBC驅動程序提供適當的META-INF。

我認爲DriverManager的行爲可能取決於CLASSPATH的細節。

如果系統中的derby.jar爲CLASSPATH,則會自動加載。但是,如果derby.jar位於具有獨立類加載器(如servlet容器,應用程序服務器或複雜IDE)的容器中,則它們不在由DriverManager初始化時搜索的類中。

0

奇怪。我一直這樣做(但不是在Eclipse中)沒有問題。你使用DriverManger.getConnection()來獲得連接嗎?我假設你正在使用Derby 10.7或更新版本?

相關問題