2014-02-12 97 views
0

我的應用程序服務器有一個到MySQL數據庫的連接。這個連接全天候開放。當互聯網連接丟失時,MySQL連接會發生什麼?

比方說我的互聯網是崩潰,或者我是來阻止端口3306

威爾JDBC拋出一個錯誤?如果不是,我該如何處理這類問題?

我問這個問題的原因是因爲我在MySQL連接隨機停止工作之前就有過病例,但沒有關閉,導致客戶端超時。

+1

您可以只需拔下插頭,看看會發生什麼... :-) – thebjorn

+0

http://stackoverflow.com/questions/2983248/com-mysql-jdbc-exceptions-jdbc4-communicationsexception-communications-link-fai – kosa

+0

最容易找到的方法:建立連接並拉出電纜。最糟糕的情況是,你已經發現,你的連接超時。數據庫系統將中止交易,並且 - 如果它在一邊 - 可能會回滾。 –

回答

1

您將得到一個MySQLNonTransientConnectionExceptionCommunicationsException。通常情況下,程序的安全,你要麼需要:

  • 打開/關閉連接必要

  • 重新打開時

我推薦前者親自連接被關閉,特別是當該數據庫是用戶指定的(某些mysql設置有連接超時)。

編輯

我似乎忘了提連接池,每@ThorbjørnRavnAndersen,但是這也是一個可行的解決方案。我個人不這樣做,每個線程操作使用一個可實例化的SQL連接。

0

就我個人而言,我將任何數據庫調用放入try/catch塊中,因爲總會有潛在的問題出現。您需要在catch塊中設置一些默認值,並且如果它出於某種原因着陸在這些默認值上,請向最終用戶顯示某種(理想情況下相當漂亮的)錯誤消息。

運行SQL查詢並不總是保證能夠撤回任何類型的結果......任何數量的東西都可能出錯 - 服務器可能關閉,連接可能會如此飽和以至於無法拉動結果是及時的,它可能會坐落在各種備份的死亡中心......這些東西都必須經常考慮,這就是爲什麼我建議按照上述方式進行操作。

最後,爲了回答你的問題,是的,在任何這些情況下,JDBC實際上都會拋出一個錯誤。

相關問題