共計 1644 個字符,預計需要花費 5 分鐘才能閱讀完成。
本篇內容主要講解“Mysql 異常 No operations allowed after statement closed 怎么解決”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“Mysql 異常 No operations allowed after statement closed 怎么解決”吧!
之所以會出現這個異常,是因為 Mysql 在 5 以后針對超長時間 DB 連接做了一個處理,那就是如果一個 DB 連接在無任何操作情況下過了 8 個小時后,Mysql 會自動把這個連接關閉。所以使用連接池的時候雖然連接對象還在但是鏈接數據庫的時候會一直報這個異常。解決方法很簡單在 Mysql 的官方網站上就可以找到。有兩個方法
### 第一種是在 DB 連接字符串后面加一個參數。
這樣的話,如果當前鏈接因為超時斷掉了,那么驅動程序會自動重新連接數據庫。
jdbc:mysql://localhost:3306/makhtutat?autoReconnect=true
不過 Mysql 并不建議使用這個方法。因為第一個 DB 操作失敗的后,第二 DB 成功前如果出現了重新連接的效果。
conn.createStatement().execute(
UPDATE checking_account SET balance = balance - 1000.00 WHERE customer= Smith
conn.createStatement().execute(
UPDATE savings_account SET balance = balance + 1000.00 WHERE customer= Smith
conn.commit();
當然如果出現了重新連接,一些用戶變量和臨時表的信息也會丟失。### 另一種方法是 Mysql 推薦的,需要程序員手動處理異常。
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
int retryCount = 5;
boolean transactionCompleted = false;
do {
try { conn = getConnection(); // assume getting this from a
// javax.sql.DataSource, or the
// java.sql.DriverManager
conn.setAutoCommit(false);
retryCount = 0;
stmt = conn.createStatement();
String query = SELECT foo FROM bar ORDER BY baz
rs = stmt.executeQuery(query);
while (rs.next()) { }
all.close()
transactionCompleted = true;
} catch (SQLException sqlEx) { String sqlState = sqlEx.getSQLState();
// 這個 08S01 就是這個異常的 sql 狀態。單獨處理手動重新鏈接就可以了。 if (08S01 .equals(sqlState) || 40001 .equals(sqlState))
{
retryCount--;
} else {
retryCount = 0;
}
} finally {
all close:
}
} while (!transactionCompleted (retryCount 0));}
}
到此,相信大家對“Mysql 異常 No operations allowed after statement closed 怎么解決”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!