Home > Database > Mysql Tutorial > Why Does My Java JDBC MySQL Code Throw \'Operation Not Allowed After ResultSet Closed\'?

Why Does My Java JDBC MySQL Code Throw \'Operation Not Allowed After ResultSet Closed\'?

Patricia Arquette
Release: 2024-11-27 13:56:09
Original
244 people have browsed it

Why Does My Java JDBC MySQL Code Throw

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(" ", "_")));
Copy after login

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!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template