MySQL出現 Operation not allowed after ResultSet closed錯誤
阿新 • • 發佈:2018-12-15
今天測試增刪查改的刪除操作時,出現以下Operation not allowed after ResultSet closed的錯誤
原始碼如下:
public static boolean insertUser(UserDTO _user) throws SQLException{ boolean bool =false; Connection conn =null; Statement stmt = null; ResultSet res = null; conn = DataAccesss.getConnection(); stmt = conn.createStatement(); res = stmt.executeQuery("select * from userr where uname ='"+_user.getUname()+"'");//先查詢資料庫中是否存在該使用者名稱,無論是軟刪除或仍存在不能插入。 if(res.next()==false) { int num = stmt.executeUpdate("insert into userr values ('"+_user.getUname()+"','"+_user.getUpassword()+"','"+_user.getTel()+"','"+_user.getSurperuser()+"','"+_user.getFlag()+"')"); System.out.println("已成功執行"+num+"行插入成功"); } else {System.out.println("使用者名稱已存在");} if(res.getInt("flag")==1) System.out.println("該使用者被軟刪除,存在資料庫中"); DataAccesss.closeConnection(conn, stmt,res); return bool=true; }
這是由於多個一個stmt多個rs進行操作引起的ResultSet已經關閉的錯誤
一個stmt多個rs進行操作. 那麼從stmt得到的rs1,必須馬上操作此rs1後,才能去得到另外的rs2,再對rs2操作. 不能互相交替使用,會引起rs已經關閉錯誤.
/* 插入功能 * 引數列表傳入userr例項 * 往表格最後輸入一行元祖 * 列印插入行數插入是否成功 * (需要修改許可權,使用者自己可以設定自己許可權??!!) */ public static boolean insertUser(UserDTO _user) throws SQLException{ boolean bool =false; Connection conn =null; Statement stmt = null; ResultSet res = null; conn = DataAccesss.getConnection(); stmt = conn.createStatement(); res = stmt.executeQuery("select * from userr where uname ='"+_user.getUname()+"'");//先查詢資料庫中是否存在該使用者名稱,無論是軟刪除或仍存在不能插入。 if(res.next()==false) { int num = stmt.executeUpdate("insert into userr values ('"+_user.getUname()+"','"+_user.getUpassword()+"','"+_user.getTel()+"','"+_user.getSurperuser()+"','"+_user.getFlag()+"')"); System.out.println("已成功執行"+num+"行插入成功"); bool=true; } else {System.out.println("使用者名稱已存在"); if(res.getInt("flag")==1) System.out.println("該使用者被軟刪除,存在資料庫中");} DataAccesss.closeConnection(conn, stmt,res); return bool; }
一個stmt最好對應一個rs, 如果用一個時間內用一個stmt開啟兩個rs同時操作,會出現這種情況. 所以解決此類問題:1.就多建立幾個stmt,一個stmt對應一個rs;2.若用一個stmt對應多個rs的話,那隻能得到一個rs後就操作,處理完第一個rs後再處理其他的
stmt=conn.createStatement(); stmt2=conn.createStatement(); rs=stmt.executeQuery("select * from t1"); rst=stmt2.executeQuery("select * from t2"); rs.last(); rst.last(); ---------------------