Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/346.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SQLException:结果集关闭后不允许操作_Java_Mysql_Sql_Database - Fatal编程技术网

Java SQLException:结果集关闭后不允许操作

Java SQLException:结果集关闭后不允许操作,java,mysql,sql,database,Java,Mysql,Sql,Database,我正在用MySQL和Java一起使用,试图制作shoppingcartDB,并且我正在尝试删除已经过了30天订购时间的元组 但编译器说: 线程“main”java.sql.SQLException中出现异常:结果集关闭后不允许操作 我怎样才能解决这个问题 代码: 引发异常的代码行是: stmt.executeUpdate(“从篮子中删除,其中orderdate='”+Odate+“;”) 您可以在一个时刻执行一条语句,最佳选项是关闭(stmt.close())第一条语句并运行第二条语句您可以在一

我正在用
MySQL
Java
一起使用,试图制作shoppingcartDB,并且我正在尝试删除已经过了30天订购时间的元组

但编译器说:

线程“main”java.sql.SQLException中出现异常:结果集关闭后不允许操作 我怎样才能解决这个问题

代码:

引发异常的代码行是:


stmt.executeUpdate(“从篮子中删除,其中orderdate='”+Odate+“;”)

您可以在一个时刻执行一条语句,最佳选项是关闭(
stmt.close()
)第一条语句并运行第二条语句

您可以在一个时刻执行一条语句,最佳选项是关闭(
stmt.close()
)使用第一条语句并运行第二条语句,您只需使用两条语句,第一条语句用于选择记录,第二条语句用于删除所需的记录

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();
}

您可以简单地使用两条语句,第一条语句选择记录,第二条语句删除所需的记录

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();
}

还值得注意的是,
rs1.next()
如果在
ResultSet
中找不到任何返回的内容,它将关闭连接。您应该检查数据库,看看里面是否有数据。还值得注意的是,
rs1.next()
如果在
ResultSet
中找不到任何返回的内容,它将关闭连接。你应该检查你的数据库,看看里面是否有数据。