2017-08-01 88 views
0

Java DB的文檔說它與JDK捆綁在一起,並且我已經讀過在後來的Java版本(我有Java 8)中不需要特殊的類加載。但是,試圖連接到它失敗:與Java DB的連接總是失敗

DriverManager.getConnection("jdbc:derby:testDB;create=true") 

這會引發SQLException,SQL狀態爲08001(連接失敗)。

我也嘗試過明確的加載驅動程序類,但它也引發一個錯誤:

Class.forName("org.apache.derby.jdbc.ClientDriver");// ClassNotFoundException 

下面的代碼甚至不能編譯,因爲德比類都沒有發現:

DriverManager.registerDriver(new org.apache.derby.jdbc.EmbeddedDriver()); 

怎麼辦我使用Java DB連接到數據庫?

+1

這很明顯。將該jar添加到您的項目 –

+1

它僅在具有特定JDK版本的運行時類路徑中以及某些Java供應商中自動進行。它從來沒有在** compile **類路徑中,你總是必須在那裏明確地添加它。 –

回答

0

要使用「內置」Java DB,您必須手動將derby jar添加到類路徑中。這是我做到了在搖籃:

testCompile files("$System.env.JAVA_HOME/db/lib/derby.jar") 

我不喜歡這一點,因爲這意味着你是依賴於本地目錄結構,而不是其名稱和版本號解決正常的依賴。

我曾預計「Java DB」會完全集成到標準庫中,但事實並非如此。它只是與每個JDK安裝共同使用。由於這種具有一般是一個過時的德比發佈的另外一個缺點,我會忽略的Java DB,只是使用來自中央Maven的最新版本德比:

testCompile group: 'org.apache.derby', name: 'derby', version: '10.13.1.1' 

還要注意的是,以前需要Class.forName(...)聲明還拋出ClassNotFoundException;該聲明不需要使德比工作。