簡體   English   中英

Java卡在等待已完成服務器端執行的慢速MySQL查詢,未引發任何錯誤

[英]Java stuck waiting for slow MySQL query that has finished executing server side, no error thrown

我正在使用Java程序查詢遠程MySQL服務器。 查詢是select語句,可能需要一分鍾到半小時的時間。 返回的數據大小始終相同(我在計算行數)。

該程序通常可以正常執行,但有時會卡在較長的查詢之一中。 它不會中止(java程序仍在“運行”)並且不會引發任何錯誤。 當我檢查MySQL服務器進程列表時,查詢未列出,並且錯誤日志也為空,因此我假設它已完成執行。

我在每次查詢之前和之后都直接打印,因此我可以確定程序被查詢卡住了。

我以為是連接超時問題,所以我將autoreconnect設置為true,但這沒有幫助。 由於沒有引發錯誤,我對如何解決此問題一無所知。

Java代碼如下所示:

Class.forName("com.mysql.jdbc.Driver");
DBConnection=DriverManager.getConnection(DBConnectionURL);
DBStatement=DBConnection.createStatement();

// being of loop
System.out.println("starting query " +selectQuery);
qA=DBStatement.executeQuery(selectQuery);
System.out.println("finished query " +selectQuery);
// do sth with query
// end of loop

如果程序卡住,則最后的輸出始終是starting query [..]

根據您粘貼的Java代碼,錯誤是這樣的:

您正在調用MySQL並打印“開始查詢....”,則發生以下兩種情況之一:查詢有效,並且您看到“完成查詢...”,或者引發異常,然后顯示“完成查詢..” ”被跳過,執行轉到處理異常的代碼。

什么樣的異常會導致這種情況:

如果selectQuery是動態修改的,則它可能是格式錯誤的查詢異常。

如果selectQuery不是動態的並且可以使用,則可以為其參數。

如果selectQuery良好且參數良好,則可能是連接超時問題:您的sql花費的時間超過了Java連接中設置的時間。

為了確定,您必須在“ catch / finally”塊中打印異常的堆棧跟蹤。 它會向您顯示問題所在。 一個簡單的谷歌搜索與問題的原因應該告訴你如何解決。

結果集有多大? MySQL JDBC連接器在返回之前會緩沖所有行,因此您可能會看到這種滯后。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM