2016-12-02 82 views
0

我正在使用MySQLJava,試圖製作shoppingcartDB,並試圖刪除已經過了30天訂單的元組。SQLException:ResultSet關閉後不允許操作

但是編譯器說:

異常線程 「main」 值java.sql.SQLException:操作不

我怎樣才能解決這個問題允許的ResultSet關閉

後?

代碼:

public static void checkBasketdate() throws Exception { 
    //Connect to MySQL: 
    Connection con = makeConnection(); 
    Statement stmt = con.createStatement(); 
    ResultSet rs1 = stmt.executeQuery("SELECT * FROM basket ;"); 
    while (rs1.next()) { 
     Date Odate = rs1.getDate("orderdate"); 
     long diff = datediffOfDate(Odate); 
     System.out.println(Odate); 
     if (diff > 30) { 
      //This is where the Exception is thrown: 
      stmt.executeUpdate("DELETE FROM basket WHERE orderdate = '" + Odate + "';"); 
      System.out.println("=>orderdate has been passed 30 days, so delete it"); 
     } 
    } 
} 

其中拋出異常的代碼行是:

stmt.executeUpdate( 「DELETE FROM籃WHERE訂購日期= '」 +大館+ 「';」) ;

+1

可能重複[如何避免ResultSet是在Java中的關閉異常?](http://stackoverflow.com/questions/935511/how-cani-i- avoid-resultset-is-closed-exception-in-java) – px06

+1

值得注意的是'rs1.next()'會關閉連接如果它無法找到ResultSet中返回的任何內容。你應該檢查你的數據庫,看看裏面是否有數據。 – px06

回答

2

你可以有一個說法在同一時刻運行,爲您最好的選擇就是關閉(stmt.close())的第一個語句和運行第二個

0

您可以簡單地使用兩種說法,第一個選擇記錄和第二個刪除所需的

public static void checkBasketdate() throws Exception { 
    //Connect to MySQL: 
    Connection con = makeConnection(); 
    Statement stmt = con.createStatement(); 
    Statement stmtDelete = con.createStatement(); 
    ResultSet rs1 = stmt.executeQuery("SELECT * FROM basket ;"); 
    while (rs1.next()) { 
     Date Odate = rs1.getDate("orderdate"); 
     long diff = datediffOfDate(Odate); 
     System.out.println(Odate); 
     if (diff > 30) { 
      //This is where the Exception is thrown: 
      stmtDelete.executeUpdate("DELETE FROM basket WHERE orderdate = '" + Odate + "';"); 
      System.out.println("=>orderdate has been passed 30 days, so delete it"); 
     } 
    } 
    stmnt.close(); 
    stmntDelete.close(); 
} 
相關問題