2010-11-02 53 views
3

我正在閱讀DataSource,here,並試圖通過使用一個簡單的文件作爲我的「數據源」在我自己的小項目中實現它。我創建了一個類,它是目前非常簡單...如何在Java中的DataSource中實現getConnection()?

public class QueueData implements DataSource { ... } 

雖是簡單的原因是因爲我一直沒能找到解釋了實現的方法應該如何工作的資源。每個人似乎都只列出上下文的初始化和一個神奇的getConnection()調用,就像這樣。

Context ctx = new InitialContext(env1); 
    DataSource ds = (DataSource)ctx.lookup("jdbc/mydatasource"); 
    Connection conn = ds.getConnection(); // Magical method! 

但是你們其中一個能給我一個getConnection()裏面的代碼應該是什麼樣子的例子嗎?

+1

我認爲這裏有一些困惑。畢竟你的功能需求是什麼?只需通過數據源使用特定的JDBC驅動程序連接特定的數據庫?或者你真的想要自己建立自己的JDBC驅動程序,因爲你的問題目前正在暗中介入? – BalusC 2010-11-02 07:57:27

+1

請務必參閱最新的文檔,以免最終提出任何「逐步淘汰」的建議; http://download.oracle.com/javase/6/docs/technotes/guides/jdbc/getstart/GettingStartedTOC.fm.html – sasuke 2010-11-02 08:06:07

+0

javax.sql.DataSource是一個定義該方法的接口。實施該方法是驅動程序供應商的工作。如果您計劃編寫自己的驅動程序(無論出於何種原因),則必須實現該接口。 getConnection內部的代碼將取決於它建立連接的底層「數據庫」。 – ch4nd4n 2010-11-02 08:51:24

回答

3

沒有人展示如何實現數據源的示例,而「恰好」使用它們的原因是因爲只有JDBC驅動程序供應商(通常是數據庫製造商)需要編寫它們。

它應該做的當然是返回一個Connection對象,它也需要是一個特定於驅動程序的類的實例。在你的情況下,可以接受SQL語句從文件讀取的東西。

你的代碼可能看起來是這樣的:

public Connection getConnection(){ 
     final String fileName = getFileNameFromMyDatabaseUrl(); 
     return new MyFileConnection(new File(fileName)); 
} 

這當然也不是很有趣的代碼,無論是。

你可以看一些開源的DataSource的實現,看看他們做了什麼:

+0

謝謝,這很有道理。當我回家時我會嘗試這些代碼。出於好奇,你是怎麼知道「MyFileConnection」類的?這似乎是我缺少的鏈接! – Danny 2010-11-02 16:54:59

+0

這是我的缺失鏈接,而是。 – Danny 2010-11-02 20:48:08

2

Connection是pret的確定一個接口本身,你也需要實現它。然後,你的getConnection()將返回你自己的類的一個實例。但是,要爲大量工作做好準備...(例如,如果您希望能夠獲取上下文中的數據源,則需要首先註冊您的實現。)

爲什麼要爲開發你自己的DataSource?在網上有非常輕量級的基於文件和進程中的數據庫庫(雖然我不得不承認我不太瞭解它們),例如HSQLDBWikipedia article),H2Wiki)...

如果您在C#中開發,我也會推薦學習Linq To XML,但是我不知道Java世界是否已經爲此提供了一個對應...

+0

謝謝,這很有用。我不知道網絡上有輕量級的基於文件的數據庫庫。如果您想給我發送幾個參考或詞語來搜索,我會很感激。 – Danny 2010-11-02 20:49:29

2

這不是神奇的。您檢索綁定到JNDI服務器的DataSource對象,通常是在應用程序服務器中設置連接池時。此設置要求您提供所有必需的數據庫詳細信息,如連接URL,身份驗證憑證和其他選項(如DataSource類)(該數據庫附帶的jdbc驅動程序中存在此類數據庫)。此設置信息用於創建DataSource,該知道如何爲給定數據庫分發連接。

比方說,你想寫你自己的實現,它給客戶端一個NOOP連接(所有操作都不產生任何連接對象)。您所要做的就是使用應用程序服務器JNDI服務器「註冊」自定義DataSource實現。該實現的getConnection()方法只會返回實現Connection接口的類和不執行任何操作的方法。