2009-05-02 81 views
3

目前,對於每個查詢,都會創建並重用一個準備好的語句。我沒有使用任何連接池。 C3P0是一個廣泛推薦的庫。在MySQL中使用準備好的語句和連接池

但是,作爲PreparedStatement綁定到連接。在共用環境中,連接返回到池中,從而使PreparedStatement無法使用。我對這個結論是否正確?有沒有辦法將Prepared Statement和連接池一起使用?

更新:這是獨立的應用程序。所以,我不能使用框架來獲得正確的連接池。

+1

錯誤的結論 - 你會得到準備好的聲明彙集每個連接,所以是需要更長的時間,直到你開始從緩存中受益,因爲你需要等待,直到連接先飽和但不會使它們不可用。 – wwadge 2010-02-17 14:49:45

回答

0

我相信如果關閉連接,PreparedStatement將會「丟失」,但只要相同的連接保持打開狀態,相同的PreparedStatement應該可用。你應該看看Spring爲你使用JdbcTemplate做到這一點。它會抽象掉所有這些,所以你不必擔心它。只需將它傳遞給一個DataSource,你就可以走了。

這裏是你如何使用C3P0作爲一個DataSource對象:http://forum.springframework.org/showthread.php?t=13078

然後,您可以做一個JdbcTemplate的bean,並通過在數據源作爲一個構造函數參數,然後注入的JdbcTemplate成任何DAO你使用對象。

1

這取決於您使用的池化機制。大多數Java EE應用服務器都有連接池實現,其中有一個預備的語句緩存以及池中的每個連接。因此,準備好的語句以及連接都可以重複使用。我不知道任何具有此功能的獨立池機制。

0

當我從「高性能MySQL」中看到this material時,它讓我覺得你必須對你的MySQL配置做些什麼,超出你在Java中設置的任何東西。你編輯過你的my.cnf文件嗎?

另外,你看看other SO questions的話題?

編輯:春天是一個框架,可以幫助池,這是非常適合獨立應用程序。

+0

我檢查了您提到的問題。在我耗盡了通用解決方案的所有選項(即連接池,準備好的語句)之後,我希望調整數據庫特定的參數。 – 2009-05-03 11:35:48