2016-12-02 1 views
0

JavaMySQL을 사용하여 shoppingcartDB를 만들려고하는데 주문 후 30 일이 지난 튜플을 삭제하려고합니다.SQLException : 결과 집합을 닫은 후에 작업을 수행 할 수 없습니다.

는 그러나 컴파일러는 말한다 : 스레드에서

예외 "기본"은 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 ("바구니에서 삭제 WHERE 주문일 = '"+오다 + ""; ") ;

는 한 순간에 실행 한 문장을 가질 수
+1

의 사용 가능한 복제 [자바에서 폐쇄 예외가 나는 결과 집합 피할 수 있는가? (http://stackoverflow.com/questions/935511/how-can-i- avoid-resultset-is-closed-in-java) – px06

+1

'rs1.next()'가 connectio를 닫을 것임을 주목할 가치가있다. ResultSet에서 반환 된 것을 찾을 수 없다면 n. DB를 확인하고 데이터가 있는지 확인해야합니다. – 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(); 
} 
관련 문제