Java JDBC MySQL Exception: "Operation Not Allowed After ResultSet Closed"
This error commonly occurs when attempting to operate on a closed ResultSet. Let's analyze the provided code to identify the cause of the exception.
Database Initialization
The MySQLDatabase class establishes a connection to the database in the connect() method. The statement variable is initialized with connection.createStatement(). However, this statement is shared across all database operations, including select and update queries.
Donation Processing
The MySQLDonation class cycles through the 'donations' table and processes donation records. The while loop iterates over the ResultSet obtained from the query("SELECT * FROM gieli436_purchases.donations") statement.
Exception Cause
The error occurs because the statement used to retrieve the ResultSet is also used to execute the delete query, which closes the previous ResultSet. As a result, subsequent next() calls on the closed ResultSet throw the "Operation Not Allowed After ResultSet Closed" exception.
Solution
To resolve this issue, create a new Statement for each query execution. Modify the MySQLDatabase class to remove statement = connection.createStatement(); from connect(). Replace all instances of statement in the class with connection.createStatement().
Corrections
// MySQLDatabase class // Remove statement = connection.createStatement(); // Replace statement with connection.createStatement() // MySQLDonation class // Remove private variable statement // Query execution results = connection.createStatement().executeQuery("SELECT * FROM gieli436_purchases.donations"); // Delete execution connection.createStatement().executeUpdate(String.format("DELETE FROM gieli436_purchases.donations WHERE donations.username='%s' LIMIT 1", client.playerName.replaceAll(" ", "_")));
By creating separate Statements for each query, you ensure that the ResultSet remains open during processing, preventing the exception.
The above is the detailed content of Why Does My Java JDBC MySQL Code Throw \'Operation Not Allowed After ResultSet Closed\'?. For more information, please follow other related articles on the PHP Chinese website!