2012-09-13 26 views
2

我正在以大型項目的小型論壇的形式提供Web服務。 Web服務提供了一系列訪問和修改數據庫的方法,然後JSP/servlet將使用該Web服務向用戶展示論壇。我應該如何在Java Web服務中設置數據庫連接?

我有我所有的方法設置,但我仍然不確定如何正確設置我的數據庫連接。現在我在Web服務類文件中有一個Connection對象,並且在類的構造函數中進行連接。我在我的所有方法中一直使用該連接對象,所以它們都依賴於正在運行的構造函數。我不確定這是否正確。

有沒有更好的方法來做到這一點?一位教練告訴我,每次有人訪問某個頁面時都會創建一個Web服務實例,這對我來說聽起來像是一項昂貴的操作。編輯:我看了一下連接池和目前爲止我發現的所有東西(包括這個需要額外的庫。我只限於股票Java SE/EE沒有額外的庫,所以這是不可能的。)

+0

如果你自己寫了,那不是沒有問題。但你不知道該怎麼做,因爲你的教授尚未覆蓋地圖。好吧。 – duffymo

回答

1

這是一個非常糟糕的主意。你不應該具有的選擇共享的Connection對象,它無法擴展這樣的,它不是線程安全的。

一個更好的辦法是使用連接池。在需要時獲得連接,使用它,並在同一方法的範圍內關閉。

我認爲你的朋友是錯誤的:一個Web服務應該獨立,與任何頁面分開。它由一個容器管理。它可能是一個singleton或一個池對象,但是你不會爲每個頁面創建一個。

+0

因此,我應該爲每種方法打開一個到數據庫的新連接?我想這會花費更多的時間/資源。 – Logan

+0

不,您讓連接池打開並管理連接。該服務檢查連接,使用它並重新檢入。 – duffymo

+0

我很困惑,有沒有連接池類或對象或類似的東西?我的課程沒有涵蓋這樣的事情。 – Logan

0

最好從簡要說明兩個問題浮現在腦海中卻發佈一些代碼:

  1. 你不集中,這將不會有任何真正的負載下很有效的連接。
  2. 創建連接的代價很高,所以如果您經常執行構造函數,那麼您將創建大量連接。
  3. 你在哪裏關閉連接?
  4. 請確保您防範sql注入。
0

你不應該建立在構造函數中的連接,因爲你很可能有大量的不活動,連接狀態,IO問題,問題...

我寧願使用DataSource從Apache圖書館,如BasicDataSource

BasicDataSource dataSource = new BasicDataSource(); 
dataSource.setUrl("jdbc:..."); 
dataSource.setUser(...); 
dataSource.setPassword(...); 

,然後在你的web服務的每個方法,調用dataSource.getConnection()來獲取連接。在內部,它使用連接池,正如另一個答案中所建議的。

相關問題