溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Mysql異常No operations allowed after statement closed怎么解決

發(fā)布時(shí)間:2021-12-20 13:41:45 來源:億速云 閱讀:8070 作者:iii 欄目:云計(jì)算

本篇內(nèi)容主要講解“Mysql異常No operations allowed after statement closed怎么解決”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“Mysql異常No operations allowed after statement closed怎么解決”吧!

之所以會(huì)出現(xiàn)這個(gè)異常,是因?yàn)镸ysql在5以后針對(duì)超長時(shí)間DB連接做了一個(gè)處理,那就是如果一個(gè)DB連接在無任何操作情況下過了8個(gè)小時(shí)后,Mysql會(huì)自動(dòng)把這個(gè)連接關(guān)閉。所以使用連接池的時(shí)候雖然連接對(duì)象還在但是鏈接數(shù)據(jù)庫的時(shí)候會(huì)一直報(bào)這個(gè)異常。解決方法很簡單在Mysql的官方網(wǎng)站上就可以找到。 有兩個(gè)方法
###第一種是在DB連接字符串后面加一個(gè)參數(shù)。
這樣的話,如果當(dāng)前鏈接因?yàn)槌瑫r(shí)斷掉了,那么驅(qū)動(dòng)程序會(huì)自動(dòng)重新連接數(shù)據(jù)庫。

jdbc:mysql://localhost:3306/makhtutat?autoReconnect=true

不過Mysql并不建議使用這個(gè)方法。因?yàn)榈谝粋€(gè)DB操作失敗的后,第二DB成功前如果出現(xiàn)了重新連接的效果。

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();

當(dāng)然如果出現(xiàn)了重新連接,一些用戶變量和臨時(shí)表的信息也會(huì)丟失。 ###另一種方法是Mysql推薦的,需要程序員手動(dòng)處理異常。

    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();
           // 這個(gè)08S01就是這個(gè)異常的sql狀態(tài)。單獨(dú)處理手動(dòng)重新鏈接就可以了。
            if ("08S01".equals(sqlState) || "40001".equals(sqlState)) 
                {                
                    retryCount--;            
                 } else {                
                     retryCount = 0;            
                     }        
         } finally {            
                 all close:        
             }    
      } while (!transactionCompleted && (retryCount > 0));}
}

到此,相信大家對(duì)“Mysql異常No operations allowed after statement closed怎么解決”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI