2015-06-09 114 views
1

我一直在Eclipse內部使用Apache Derby。我啓動了一個網絡服務器,並且一直在使用servlet。在我的Eclipse項目中,我在「base.pack」包中有一個名爲「User」的類。我打開了一個SQL腳本,並且一直試圖將實現Serializable的User轉換爲自定義類型。當我運行以下命令行,一切工作正常:Derby,Java:遇到「CREATE_TYPE」語句的問題

CREATE TYPE CARTEBLANCHE.bee 
EXTERNAL NAME 'base.pack.User' 
LANGUAGE JAVA 

這是繼通用格式,他們確定位置:http://db.apache.org/derby/docs/10.7/ref/rrefsqljcreatetype.html#rrefsqljcreatetype

現在,當我嘗試使用這種新類型來創建一個表,我得到一個錯誤。我運行下面的一行:

CREATE TABLE CARTEBLANCHE.TestTabel (ID INTEGER NOT NULL, NAME CARTEBLANCHE.bee, PRIMARY KEY(ID)); 

我收到以下錯誤:

The class 'base.pack.User' for column 'NAME' does not exist or is inaccessible. This can happen if the class is not public.

現在,類實際上是公共的,正如我前面提到的,它確實實現Serializable接口。我不認爲我錯誤地陳述包名,但我可能是錯的。我想知道,這是我的類路徑的問題嗎?如果是這樣,你會如何解決這個問題?我承認我對類路徑瞭解不多。

謝謝。

(僅供參考,我已經配置我的項目構建路徑,包括derby.jarderbyclient.jarderbytools.jarderbynet.jar,我已經把這些文件到我的項目的lib文件夾以及)。

+0

您是否將錯誤的文本粘貼到「我收到以下錯誤」的問題中?看起來你粘貼了兩次CREATE TABLE語句。 –

+0

糟糕!你是對的,我的錯。我編輯了這個問題以包含正確的錯誤信息 - 謝謝指出! – jpabene

回答

0

儘可能客氣,我可以建議如果你對Java的CLASSPATH概念感到不舒服,那麼在Derby中編寫自己的自定義數據類型可能是一個具有挑戰性的項目?

在這裏描述的具體情況中,會出現一個問題,那就是您的自定義Java代碼不僅必須可用於您的客戶機應用程序,還必須可用於Derby Network Server,這意味着您需要修改服務器的CLASSPATH以及您的應用程序的CLASSPATH。

這一切都有可能,這不僅僅是一個初學者級別的項目。

要開始自定義您的Derby Network Server,第一個主題將介紹如何啓動它。這裏的一般過程的概述:http://db.apache.org/derby/docs/10.11/adminguide/tadmincbdjhhfd.html

取決於你如何精確地啓動Derby網絡服務器,你可能會被編輯CLASSPATH中startNetworkServerstartNetworkServer.bat腳本settting,否則你會被編輯設置CLASSPATH在你自己寫的腳本中啓動服務器。

如果是像Eclipse或Netbeans這樣的啓動Derby Network Server的工具,則需要深入瞭解該工具的詳細信息,以瞭解有關如何配置其CLASSPATH的更多信息。

如果您已經編寫了定製Java應用程序來啓動Derby Network Server(例如,如此處所述:http://db.apache.org/derby/docs/10.11/adminguide/tadminconfig814963.html),那麼您將配置您的自定義應用程序的CLASSPATH。

無論如何,作爲一個基本步驟,您將希望在Derby Network Server的類路徑中部署自定義Java擴展類,這意味着您需要將它們構建到.jar文件中並將其放入。jar文件在Derby網絡服務器有權訪問的地方,並且您希望將該構建jar-and-copy-it-to-the-right-location過程直接進行,因此您應該將其集成到任何構建你正在使用的工具(Apache Ant?)。

而且,您需要考慮Java安全策略,因爲默認安全策略會阻止您將自定義Java類輕鬆加載到您的Derby Network Server中,因爲這看起來像是惡意軟件攻擊並且Derby Network Server正在進行試圖阻止這一點。因此,請研究安全手冊的這一部分:http://db.apache.org/derby/docs/10.11/security/tsecnetservrun.html

+0

我很欣賞你的坦率。我知道這可能會很有挑戰性,但我致力於解決這個問題,無論這是否意味着使用CLASSPATH或切換到Oracle之類的東西。然而,現在,我想繼續與德比一起跋涉。你能給我一些關於修改服務器的CLASSPATH的建議嗎? – jpabene

+0

當然,我會編輯我的答案,試圖包括一些。 –

+0

我按照你的指示做了什麼,運行了SQL腳本,並且在它工作的時候幾乎幹掉了我自己。我已經習慣了在SQL Results窗口中彈出「X Failed」。非常感謝你在這裏的幫助!我希望我有足夠的聲望給你一個贊成票。我很感激你在答案中的詳細程度。 – jpabene