2016-12-02 89 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(); 
} 
相关问题