錯誤原因:
太多的連接數,登錄用戶過多,配置的mysql連接數過小,或者某些連接沒有關閉,導致連接數過大。
問題的解決:
修改mysql的my.ini配置文件,網上的說法:mysql安裝目錄下的my.ini中設定的並發連接數太少或者系統繁忙導致連接數被占滿。
而項目實際上部署在linux系統上,需要找到my.cnf的配置文件,一般在etc/my.cnf,找到這個文件,添加如下行:
set-variable=max_connections=1000
set-variable=max_user_connections=500
set-variable=wait_timeout=200
之后重啟mysql,生效。
net stop mysql
net start mysql
max_connections: 為設置最大的連接數
max_user_connections:設置每用戶最大的 連接數500
wait_timeout:表示200秒后將關閉空閑連接,但對正在工作的連接不受影響。
//重新啟動MySQL后使用下面的命令查看修改是否成功
# mysqladmin -uroot -p variables
Password:
//可以看到以下項說明修改成功
| max_connections | 1000
| max_user_connections | 500
| wait_timeout | 200
解決方法二:
還有一個可能就是代碼里打開了太多的連接,但是忘記了在finally塊里面關閉,從而導致在處理大數據的時候,拋出異常。下面這樣的代碼就不會有異常了。
try{
conn=Good.getConnection(); stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE , ResultSet.CONCUR_UPDATABLE); String sql1="insert into cat_garbage values('"+rs.getInt("id")+"','"+rs.getInt("cid")+"','"+rs.getString("name")+"','"+rs.getString("keyword")+"')"; stmt.executeUpdate(sql1); } catch(SQLException|ClassNotFoundException|IOException e) { e.printStackTrace(); } finally { if(stmt!= null) stmt.close(); if(conn!= null) conn.close(); }
要隨時記住關閉rs,stmt,conn等資源,學會使用finally,在finally中,這些語句一定會執行